一、定义 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
应用实例: 1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。
二、优缺点 优点:
- 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
- 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;
缺点:
- 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。
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!!!
推荐阅读
- 面试|我经历的IT公司面试及离职感受(转)
- java|设计模式——创建型——工厂方法(Factory Method)
- 设计模式|设计模式_创建型模式——工厂方法
- 设计模式|设计模式——创建型软件设计模式——工厂方法模式
- 设计模式之装饰器模式
- 设计模式之设计原则
- 设计模式六大原则(5)(迪米特法则 最少知道)
- 观察者模式实现之EventBus(Google)
- Java高级面试|常见设计模式——装饰模式
- java设计模式——单例模式