设计模式总结——工厂方法模式

109 阅读2分钟

定义

工厂方法模式,也叫工厂模式,多态工厂模式,将具体产品的实例的创建延迟到工厂类的子类中,即由子类决定具体该实例化哪个产品

需要的类:

  • 抽象产品类
  • 具体产品类
  • 抽象工厂类
  • 具体工厂类
  • 测试类

步骤:

  • 创建抽象产品类,定义具体产品的公共接口
  • 创建具体产品类
  • 创建抽象工厂类,定义具体工厂的公共接口
  • 创建具体工厂类,完成具体产品的实例化工作
  • 创建测试类,通过调用具体工厂类的方法,来完成具体产品的创建
// 创建抽象产品类
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关键字