设计模式之工厂模式
是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