【起源】
某个类经常变化,但是接口保持稳定;
【动机】
定义一个用于创建对象的接口,让子类决定实例化哪一个类;
(用抽象类实现稳定的部分,变化的部分由子类重写;每个类的对象创建工作由一个对应的类来完成,称之为“工厂类”)
Client AbstractFactory AbstractClass
Factory1 Class1
Factory2 Class2
【核心】
抽象类与具体类的关系,就像【变量,值】;
当一个值在程序中的多个地方出现时,修改不方便,用一个变量来代替它们,起到“宏”的作用;
工厂类的作用:是将类的创建工作封装到非Client,减少Client的耦合和关注;
简化的 Abstract Factory;
【代码实例】
【FactoryMethod, AbstractFactory, Builder的区别】
这3个模式非常像,关注下它们的差别:
1)Factory Method 解决“单个对象”的需求变化(对外不变,对内“整顿”);
2)Abstract Factory 解决“系列对象”的需求变化(团队“打法”不变,换整批“替补”上);
3)Builder 解决“对象部分”的需求变化(框架不变,局部“调换”);
【模型图】