设计模式之工厂模式
是java中最常见的设计模式之一,属于创建类型模式,提供了最佳的创建对象的方法。在工厂模式中,我们不会对客户端暴露创建逻辑,而是通过一个共同的接口来指向创建的对象。
特点:创建过程在其子类执行,应用于产品结果复杂的场合
使用情况:在代码中需要在不同情况下创建不同实例时
有什么优缺点:
优点:1,创建对象时,调用者只需要知道其名称即可,
2,扩展性高,如果需要增加一个产品,只需要扩展一个工厂类
3,屏蔽产品的具体实现,调用者只需要关心产品接口
缺点:每增加一个产品时,都需要增加一个具体类和对象实现工厂,这样系统中的类就会成倍的增加,一定程度上增加了系统的复杂度,也增加了系统对具体类的依赖。
我们将创建一个 Car接口和实现 Car接口的实体类。下一步是定义工厂类 CarFactory。
CarPatternDemo,我们的演示类使用 CarFactory 来获取 Car对象。它将向 CarFactory 传递信息(HONGQI/ BENCHI/ BAOMA),以便获取它所需对象的类型。
步骤1:创建对象接口
public interface Car {
void performance();
}
步骤2:创建实现接口的实体类。
public class Hongqi implements Car{
@Override
public void performance() {
System.out.println("This is hongqi performance");
}
}
public class Benchi implements Car{
@Override
public void performance() {
System.out.println("This is benchi performance");
}
}
public class Baoma implements Car{
@Override
public void performance() {
System.out.println("This is baoma performance");
}
}
步骤3:创建一个工厂,生成基于给定信息的实体类的对象。
public class CarFactory{
public Car getCar(String carType){
if(carType == null){
return null;
}
if(carType.equalsIgnoreCase("HONGQI")){
return new Hongqi();
}else if(carType.equalsIgnoreCase("BENCHI")){
return new Benchi();
}else if(carType.equalsIgnoreCase("BAOMA")){
return new Baoma();
}
return null;
}
}
步骤4:
使用该工厂,通过传递类型信息来获取实体类的对象。
public class factoryCarTypeDemo{
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
//获取 Hongqi 的对象,并调用它的 performance 方法
Car car1 = carFactory.getCar("HONGQI");
car1.performance();
//获取 Benchi 的对象,并调用它的 performance 方法
Car car2 = carFactory.getCar("BENCHI");
car2.performance();
//获取 Baoma 的对象,并调用它的 performance 方法
Car car3 = carFactory.getCar("BAOMA");
car3.performance();
}
}
输出结果:
This is hongqi performance
This is benchi performance
This is benchi performance