描述: 创建相关的对象提供接口,无须指定具体类
优点: 便于新增产品
缺点: 调整产品结构麻烦,违反开闭原则
应用:无需关注对象创建过程,稳定结构的产品类,每次新增产品
classDiagram
class AbstractProductA
<> AbstractProductA
class AbstractProductB
<> AbstractProductB
class AbstractFactory{
<>
createProductA()* AbstractProductA
createProductB()* AbstractProductB
}
class ConcreteFactory1{
constructor()
+createProductA() AbstractProductA
+createProductB() AbstractProductB
}
class ConcreteFactory2{
constructor()
+createProductA() AbstractProductA
+createProductB() AbstractProductB
}
class ConcreteProductA1
class ConcreteProductB1
AbstractProductA <|.. ConcreteProductA1:实现
AbstractProductB <|.. ConcreteProductA1:实现
AbstractProductA <|.. ConcreteProductB1:实现
AbstractProductB <|.. ConcreteProductB1:实现
AbstractFactory <|.. ConcreteFactory1 :实现
AbstractFactory <|.. ConcreteFactory2 :实现
ConcreteProductA1 <.. ConcreteFactory1:依赖
ConcreteProductB1 <.. ConcreteFactory2:依赖
- 产品接口 & 产品工厂接口
- 工厂实现类依赖产品实现类
- 工厂的实例的产品方法创建产品实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| interface AbstractProductA {}
interface AbstractProductB {}
interface AbstractFactory { createProductA() : AbstractProductA; createProductB() : AbstractProductB; }
class ConcreteProductA1 implements AbstractProductA {}
class ConcreteProductA2 implements AbstractProductA {}
class ConcreteProductB1 implements AbstractProductB {}
class ConcreteProductB2 implements AbstractProductA {}
class ConcreteFactory1 implements AbstractFactory { constructor() {} public createProductA() : AbstractProductA { return new ConcreteProductA1(); } public createProductB() : AbstractProductB { return new ConcreteProductB1(); } }
class ConcreteFactory2 implements AbstractFactory { constructor() {} public createProductA() : AbstractProductA { return new ConcreteProductA2(); } public createProductB() : AbstractProductB { return new ConcreteProductB2(); } }
const factory1 : AbstractFactory = new ConcreteFactory1(); const factory2 : AbstractFactory = new ConcreteFactory2();
const productA1 : AbstractProductA = factory1.createProductA(); const productA2 : AbstractProductA = factory2.createProductA(); const productB1 : AbstractProductB = factory1.createProductB(); const productB2 : AbstractProductB = factory2.createProductB();
|