Java中的三种工厂模式
2020-12-13 05:27
标签:定义 抽象工厂 nbsp string ide vat 耦合度 turn 汽车 /** //简单工厂模式 public interface Car { public class BenZ implements Car { public class BWM implements Car{ public class SimpleFactoryTest { //工厂方法 工厂方法使用一个抽象工厂角色作为核心来代替在简单工厂模式中使用具体类作为核心。虽然使用工厂方法模式足以应付我们可能遇到的大部分业务需求。但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的。 最好就是使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。 在某些时候对于系统中存在不同的产品树,而且产品树上存在产品族,那么这种情况下就可能可以使用抽象工厂模式了。 //定义一个工厂类的接口 接口就是生产汽车 其他负责调用 public interface Car { public class BWMFactory implements Factory{ public class BenZFactory implements Factory { public class BenZ implements Car{ public class BWM implements Car{ public class FactoryTest { //抽象工厂 //定义一个抽象工厂类的接口 public interface Car { public class BWM implements Car{ public class BenZ implements Car{ public class BWMFactory extends AbstractFactory{ public class BenZFactory extends AbstractFactory { public class DefaultFactory extends AbstractFactory { public class AbstractFactoryTest { Java中的三种工厂模式 标签:定义 抽象工厂 nbsp string ide vat 耦合度 turn 汽车 原文地址:https://www.cnblogs.com/zwjcom/p/11141097.html
* 设计模式之工厂模式,用户创建对象的,通过工厂模式来降低代码的耦合度
* @author
*/
public class SimpleFactory{
/**
* 根据不过的String参数 name返回不同的汽车对象name
* @param name
* @return
*/
public Car getCar(String name){
/*
* 利用equals()方法的特性:对于任何非空引用值x,x.equals(null)
* 都应返回false
* "name"是一个非空的String对象,也就是任何一个非空引用值x
*/
if(name.equals("BenZ")){
return new BenZ();
}else if(name.equals("QQ")){
return new QQ();
}else{
System.out.println("工厂没有这种车型");
return null;
}
}
}
//汽车接口 用来实现
String getName();
}
//实现汽车接口
@Override
public String getName(){
return "BenZ";
}
}
//实现汽车接口
@Override
public String getName(){
return "BWM";
}
}
public static void main(String[] args){
//简单工厂的测试类
SimpleFactory simpleFactory = new SimpleFactory();
Car car = simpleFactory.getCar("BenZ");
System.out.println(car.getName()); //BenZ
}
}
public interface Factory{
Car getCar();
}
//汽车接口 用来实现
String getName();
}
//实现汽车接口
@Override
public Car getCar(){
return new BWM();
}
}
//实现工厂接口
@Override
public Car getCar(){
return new BenZ();
}
}
//实现汽车接口
public String getName() {
return "BenZ";
}
}
//实现汽车接口
public String getName() {
return "BWM";
}
}
public static void main(String[] args){
//工厂的测试类
Factory bwmFactory = new BWMFactory();
System.out.println(bwmFactory.getCar().getName()); //BWM
Factory benzFactory = new BenZFactory();
System.out.println(benzFactory.getCar().getName()); //BenZ
}
}
public abstract class AbstractFactory{
protected abstract Car getCar();
//动态配置
public Car getCar(String name){
if("BWM".equals(name)){
return new BWMFactory().getCar();
}else if("BenZ".equals(name)){
return new BenZFactory().getCar();
}else{
System.out.println("工厂生产不了这种车型");
return null;
}
}
}
//汽车接口 用来实现
String getName();
}
//实现汽车接口
public String getName() {
return "BWM";
}
}
public String getName() {
return "BenZ";
}
}
//实现汽车接口
@Override
public Car getCar(){
return new BWM();
}
}
//实现工厂接口
@Override
public Car getCar(){
return new BenZ();
}
}
private AudiFactory defaultFactory = new AudiFactory();
public Car getCar(){
return defaultFactory.getCar();
}
}
public static void main(String[] args){
//工厂的测试类
DefaultFactory factory = new DefaultFactory();
System.out.println(factory.getCar("BWM").getName()); //BWM
}
}