设计模式---工厂模式

it2022-05-05  138

设计模式之工厂模式

     是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

 


最新回复(0)