Skip to content

Latest commit

 

History

History
57 lines (47 loc) · 1.49 KB

02工厂模式.md

File metadata and controls

57 lines (47 loc) · 1.49 KB

工厂模式

根据不同的输入返回不同的实例,一般用来创建同一类对象。例如去饭店(工厂)点菜(实例)

解决问题:

  • 将对象的创建和实现分离

优点:

  • 结构清晰
  • 扩展性好:符合开放-封闭原则
  • 解耦:符合最少知识

缺点:

  • 额外的系统复杂度

使用场景

  • 对象的创建比较复杂时
  • 处理同类对象时

工厂模式与模板方法模式的区别:

  • 工厂模式:主要关注产品实例的创建,对创建流程封闭起来
  • 模板方法模式:主要专注的是为固定的算法骨架提供某些步骤的实现

实现代码

/* 工厂类 */
class Factory {
    static getInstance(type) {
        switch (type) {
            case 'Product1':
                return new Product1()
            case 'Product2':
                return new Product2()
            default:
                throw new Error('当前没有这个产品')
        }
    }
}

/* 产品类1 */
class Product1 {
    constructor() { this.type = 'Product1' }
    operate() { console.log(this.type) }
}

/* 产品类2 */
class Product2 {
    constructor() { this.type = 'Product2' }
    operate() { console.log(this.type) }
}

const prod1 = Factory.getInstance('Product1')
prod1.operate()																	// 输出: Product1
const prod2 = Factory.getInstance('Product3')		// 输出: Error 当前没有这个产品

参考

JavaScript 设计模式精讲 - 第二章 08工厂模式