定义
工厂方法模式,也叫工厂模式,多态工厂模式,将具体产品的实例的创建延迟到工厂类的子类中,即由子类决定具体该实例化哪个产品
需要的类:
- 抽象产品类
- 具体产品类
- 抽象工厂类
- 具体工厂类
- 测试类
步骤:
- 创建抽象产品类,定义具体产品的公共接口
- 创建具体产品类
- 创建抽象工厂类,定义具体工厂的公共接口
- 创建具体工厂类,完成具体产品的实例化工作
- 创建测试类,通过调用具体工厂类的方法,来完成具体产品的创建
// 创建抽象产品类
public interface IFactory {
IProduct create();
}
// 创建具体产品类A
public class ProductAImpl implements IProduct {
@Override
public void show() {
System.out.println("工厂方法模式——接口:我是A");
}
}
// 创建具体产品类B
public class ProductBImpl implements IProduct {
@Override
public void show() {
System.out.println("工厂方法模式-接口:我是B");
}
}
// 创建抽象工厂类
public interface IFactory {
IProduct create();
}
// 创建具体工厂类A
public class FactoryA implements IFactory {
@Override
public IProduct create() {
return new ProductAImpl();
}
}
// 创建具体工厂类B
public class FactoryB implements IFactory {
@Override
public IProduct create() {
return new ProductBImpl();
}
}
// 创建测试类
public static void main(String[] args) {
new FactoryA().create().show();
new FactoryB().create().show();
}
结果:
工厂方法模式——接口:我是A
工厂方法模式-接口:我是B
总结:
缺点:
- 每增加一个具体的产品就要相应的增加一个具体的工厂类,代码量增加
- 一个具体的工厂只能生产一个具体的产品
优点:
- 符合开-闭原则,增加一个新的具体产品的时候不用修改工厂类,只需要增加具体的工厂类和具体的产品就可以了
- 符合单一职责,一个具体的工厂类只负责生产一个具体的产品
- 可以形成继承的结构,因为不像简单工厂模式那样使用了static关键字