工厂模式
所有工厂模式都是用来封装对象的创建的。
简单工厂 - 组合
就是将代码中可能会变换的创建具体类的代码抽离出来封装成一个具体的工厂类,原来的代码依赖这个具体的工厂类来获得想要的具体类的实例化对象。具体类的对象由这个具体的工厂类来实例化。新增具体类只需修改这个具体的工厂类,而这个工厂类也可以给多个使用到具体类的对象引用。
工厂是另一个被原代码具体使用到的对象
工厂方法 - 继承,让子类决定该创建的对象是什么
首先将使用具体类的代码抽象化为A,同时将需要引用的具体类的实例化过程抽象为工厂方法F,然后在通过派生于A的子类Bs来实现各自定制话的工厂方法F。这样A实际依赖于抽象C(具体类的抽象),然后具体类又实现(依赖)了抽象C,这样就实现了依赖倒置。
这里抽象化的A是一个超类,这个超类完成了这一类代码所有共性的业务行为,同时将原本需要依赖的下层对象的实例化推迟到由子类来完成,超类A相当于提供了一个框架。以此来实现行为与创建解耦。
抽象工厂 - 对象的组合,将工厂抽象后作为成员
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
其实就是将简单工厂中的具体工厂也抽象化为抽象工厂
由抽象工厂的子类(具体工厂)通过实现工厂方法定义了产品的实例化过程
具体工厂实例化后传给针对抽象工厂所写的代码中。