介绍
工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂方法模式,和抽象工厂模式。这次说明的是工厂方法模式。
结构
- 定义一个产品类接口
- 定义具体的产品类的不同实现
- 定义一个工厂类接口
- 定义具体的工厂类实现,每个实现对应上述每个产品的创建
类图结构
代码实现
定义产品类接口
public interface Product {
void show();
}
定义具体的产品实现类
public class ProductA implements Product{
@Override
public void show() {
System.out.printf("ProductA is showing");
}
}
public class ProductB implements Product{
@Override
public void show() {
System.out.println("ProductB is showing");
}
}
定义工厂类接口
public interface Factory {
Product creatProduct();
}
定义具体的工厂实现类
工厂FactoryA负责创建A产品
public class FactoryA implements Factory{
@Override
public Product creatProduct() {
return new ProductA();
}
}
工厂FactoryB负责创建B产品
public class FactoryB implements Factory{
@Override
public Product creatProduct() {
return new pattern.factory.ProductB();
}
}
场景类
这里场景类是通过创建具体的工厂,工厂在创建自己负责的产品,而不是一个工厂来创建多个产品。从而在后续需要新增一个产品时只需要扩展具体的产品类和工厂类,不需要修改原有的工厂类,做到了开闭原则。
public class Client {
public static void main(String[] args) {
Factory factoryA = new FactoryA();
Factory factoryB = new FactoryB();
Product productA = factoryA.creatProduct();
Product productB = factoryB.creatProduct();
productA.show();
productB.show();
}
}
优缺点
工厂方法模式符合开闭原则,对修改闭合,对扩展开放,系统架构清晰,工厂的职责清晰。如果需要扩展产品类时,需要同时增加产品实现类和工厂实现类,会增加系统复杂性。