# 工厂模式

  • 将 new 操作单独封装
  • 遇到 new 时,就要考虑是否该使用工厂模式

# 画 UML 类图

在这里插入图片描述

# 代码

class Product {
  constructor(name) {
    this.name = name
  }
  init() {
    console.log('init')
  }
  fn1() {
    console.log('fn1')
  }
  fn2() {
    console.log('fn2')
  }
}

class Creator {
  create(name) {
    return new Product(name)
  }
}

// 测试
let creator = new Creator()
let p = creator.create('p1')
p.fn1()
p.init()

# 场景

# jQuery -$('div')

  • $('div') 和 new $('div)有何区别
  • 第一:书写麻烦,jQuery的链式操作将成为噩梦
  • 第二:一旦jQuery名字变化,将是灾难性的

# React.createElement

class Vnode(tag, sttrs, chilren) {
  // ...
}
React.createElement = function(tag, sttrs, children) {
  return new Vnode(tag, sttrs, children)
}

# vue 异步组件

Vue.component('async-example', function(resolve, reject) {
  setTimeout(funciton() {
    resolve({
      template: '<div>I am async !</div>'
    })
  }, 1000)
})

# 设计原则验证

  • 构造函数和创建者分离
  • 符合开放封闭原则

评 论:

更新: 11/21/2020, 7:00:56 PM