一、介绍
- 将new操作单独封装
- 遇到new时就要考虑是否要使用工厂模式
二、事例
例如去KFC买汉堡,工作人员会把做汉堡的工程封装成一套流程,我们只需要点餐,就能获取到汉堡。三、UML类图
四、代码实现
// 在创建对象的时候也有用到
// 创建一个产品类
class Product {
constructor(name) {
this.name = name
}
init() {
console.log(`${this.name}执行初始化操作`)
}
otherFun() {
console.log(`${this.name}执行其他方法`)
}
}
// 创建一个工厂类,也可以直接把Creator写在Product里面
class Creator {
create (name) {
return new Product(name)
}
}
// 测试
let creator = new Creator() // 实例化一个工厂
let p = creator.create('zhangsan') // 告诉工厂要做什么
p.init()
p.otherFun()
五、应用场景
1、jq中的$(‘div’)
```javascript class jQuery { constructor (selector) { let slice = Array.prototype.slice let dom = slice.call(document.querySelectorAll(selector)) let len = dom ? dom.length : 0 for (let i = 0; i < len; i ++) {
} this.length = len this.selector = selector || ‘’ } append (node) {this[i] = dom[i]
} …api方法 } window.$ = function (selector) { return new jQuery(selector) }
<a name="LlMJG"></a>
## 2、React.createElement
```javascript
class Node(tag, attr, child) {
...省代码
}
React.createElement = function (tag, attr, child) {
return new Node(tag, attr, child)
}
3、Vue异步组件
六、总结
- 学完之后去读源码,并将这些设计模式抽离处理
- 刻意训练
- 平时编程时多用设计模式思想往里面套用