飞雪连天射白鹿,笑书神侠倚碧鸳

0%

【23种设计模式】4抽象工厂模式

描述: 创建相关的对象提供接口,无须指定具体类
优点: 便于新增产品
缺点: 调整产品结构麻烦,违反开闭原则

应用:无需关注对象创建过程,稳定结构的产品类,每次新增产品


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
// 抽象产品A接口
interface AbstractProductA {}
// 抽象产品B接口
interface AbstractProductB {}
// 抽象工厂接口
interface AbstractFactory {
createProductA() : AbstractProductA;
createProductB() : AbstractProductB;
}
// implements实现接口中定义的抽象方法
// 具体产品A1
class ConcreteProductA1 implements AbstractProductA {}
// 具体产品A2
class ConcreteProductA2 implements AbstractProductA {}
// 具体产品B1
class ConcreteProductB1 implements AbstractProductB {}
// 具体产品B2
class ConcreteProductB2 implements AbstractProductA {}
// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {
constructor() {}
public createProductA() : AbstractProductA {
return new ConcreteProductA1();
}
public createProductB() : AbstractProductB {
return new ConcreteProductB1();
}
}
// 具体工厂2
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();
听说,打赏我的人最后都找到了真爱
↘ 此处应有打赏 ↙
// 用户脚本