【起源】
client 在创建对象时 依赖于 class, class 的变化会对 client 造成影响,因此要封装 创建对象的过程;
通常使用的方式:新建工厂类,用静态方法封装 对象的创建过程;
【动机】
提供一个接口,用来创建 一系列相互依赖的对象(存在多个系列的对象,在不同系列中切换);
封装 系列(纵向) 这个变化,抽象类(横向)的变化 在后面的模式中解决;
抽象类A 抽象类B ... 抽象工厂 (在创建对象时,client 只关注这一行)
系列1 具体类A1 具体类B1 ... 工厂1
系列2 具体类A2 具体类B2 ... 工厂2
【核心】
灵活利用了 抽象类,抽象类和具体类的关系就像 【变量,值】;
“抽象类”从纵向关注具体类,“工厂类”从横向关注具体类,构成一个二维坐标系;
【代码实例】
【模型图】