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

0%

【23种设计模式】3工厂方法模式

描述:封装一个创建对象的类,由子类决定需要实例化的类
优点:添加新产品要添加一个具体工厂和具体产品,符合开放封闭
缺点:类的个数多

应用:创建对象时,需要灵活可扩展的类时


简单工厂&工厂方法区别

  • 简单工厂
    • 工厂类中包含了必要的判断逻辑,根据条件动态的实例化相关的类,不同的实例会有不同的运算
    • 添加新需求时,需要修改原有的类,不但对扩展开放,也对修改开放了
  • 工厂方法
    • 依赖倒转倒转原则,把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品的工厂方法,所有要生成的工厂都去实现这一个接口
classDiagram
    class Product{
        <>
        method1()
        method2()
    }
    class ConcreteProduct_1{
        constructor()
        method1()
        method2()
    }
    class Creator {
        <>
        +createProduct()* Product
    }
    class ConcreteCreator{
        constructor()
        +createProduct() Product
    }
    ConcreteCreator --|> Creator:继承
    ConcreteCreator ..> ConcreteProduct_1:依赖
    ConcreteProduct_1 ..|> Product:实现
  • 产品接口
    • 产品实现类
  • 产品工厂
    • 依赖产品实现类
    • 创建产品实例
  • 工厂的实例创建产品
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
// 抽象产品接口
interface Product{
method1() : void;
method2() : void;
}
// 具体产品一
class ConcreteProduct_1 implements Product {
constructor(){}
method1() {}
method2() {}
}
// 抽象工厂
abstract class Creator {
public abstract createProduct(type : number) : Product;
}
// 具体工厂
class ConcreteCreator extends Creator {
constructor(){
super();
}
// ts中,在继承的父类中包含abstract时必须在子类实现此方法
public createProduct(type : number) : Product {
let product = null;
if (type === 1) {
product = new ConcreteProduct_1();
} else if (type === 2) {
product = new ConcreteProduct_2();
}
return product;
}
}
// 使用
const creator : Creator = new ConcreteCreator();
const myProduct : Product = creator.createProduct(1);
听说,打赏我的人最后都找到了真爱
↘ 此处应有打赏 ↙
// 用户脚本