工厂模式介绍
定义
在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。
工厂模式的分类
- 简单工厂, 又称为静态工厂方法模式
- 工厂方法, 又称为多态性工厂模式
- 抽象工厂, 又称为工具箱模式
使用工厂模式的好处
- 解耦:把对象的创建和使用的过程分开
- 降低代码重复:如果创建某个对象的过程十分复杂,需要一定的代码量,如果很多地方都要用到,那么就会有很多重复的代码。
- 降低维护成本:由于创建过程都有工厂统一管理,所以发生业务逻辑变化,不需要找到所以创建对象的方法逐个去修正,只需要在工厂里修改即可,降低维护成本。
简单工厂(此处使用反射机制实现)
适用场景
- 需要创建的对象较少
- 客户端不关心对象的创建过程
简单工厂模式角色分配
- 抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有公共接口
1 | public interface Animal { |
- 具体产品角色:简单工厂模式的创建目标
1 | public class Dog implements Animal { |
- 抽象产品角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。
1 | public class AnimalFactory { |
工厂方法模式(使用最多)
工厂方法是简单工厂的进一步深化,在工厂方法模式中, 我们不再提供一个统一的工厂类来创建所有的对象, 而是针对不同的对象去提供不同的工厂, 也就是说 每个对象都有一个与之对应的工厂
工厂方法模式的角色分配
- 抽象产品角色: 工厂方法模式锁创建的对象的父类
1 | public interface Animal { |
- 具体产品角色:这个角色实现了抽象产品角色所定义的接口
1 | public class Dog implements Animal { |
- 抽象工厂角色:工厂方法模式的核心, 是所有工程类的接口类
1 | public interface Factory { |
- 具体工厂角色:实现抽象工厂接口的具体工厂类
1 | public class DogFactory implements Factory { |
抽象工厂
抽象工厂是生产出一套产品的(至少两个),这些产品是相互有关系或者有关联的, 而工厂方法是生产单一产品的工厂。