设计模式|设计模式之工厂模式

一、定义 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。
二、优缺点 优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:
  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。
三、代码实现举例 (1)创建一个接口
public interface Product { public void show(); }

(2)创建实现接口的实体类
public class CreateProduct1 implements Product { @Override public void show() { System.out.println("CreateProduct1 show!!!"); } }public class CreateProduct2 implements Product{ @Override public void show() { System.out.println("CreateProduct2 show!!!"); } }

【设计模式|设计模式之工厂模式】(3)创建一个工厂,生成基于给定信息的实体类的对象
public class ProductFactory {public Product getProduct(String productType){ if (null == productType || productType.length() < 1){ return null; } if (productType.equalsIgnoreCase("PRODUCT1")){ return new CreateProduct1(); } else if (productType.equalsIgnoreCase("PRODUCT2")){ return new CreateProduct2(); } return null; }}

(4)使用该工厂,通过传递类型信息来获取实体类的对象
public class FactoryPatternDemo { public static void main(String[] args) { ProductFactoryfactory = new ProductFactory(); Product p1 = factory.getProduct("PRODUCT1"); Product p2 = factory.getProduct("PRODUCT2"); p1.show(); System.out.println("--------------------"); p2.show(); } }

结果:
CreateProduct1 show!!! -------------------- CreateProduct2 show!!!

    推荐阅读