工厂模式
工厂模式是一种用来创建对象的设计模式。我们不暴露对象创建的逻辑,而是将逻辑封装在一个函数内,那么这个函数可以成为工厂。工厂模式根据抽象程度的不同可以分为:1.简单工厂 2.工厂方法 3.抽象工厂
- 将new操作单独封装
- 遇到new时,就要考虑是否使用工厂模式
class Product{
constructor(name){
this.name = name;
}
fun1(){
alert('fun1')
}
fun2(){
alert('fun2')
}
}
// 创建一个工厂,直接调用工厂操作Product里面的方法。
class Created{
create(name){
return new Product(name)
}
}
let created = new Created()
// 通过工厂创建 Product
let p = created.create()
p.fun1()
p.fun2()
使用场景
- jquery - $(‘span)
- vue 异步组件
class Jquery {
constructor(selector) {
let slice = Array.prototype.slice;
let dom = document.querySelectorAll(selector)
let len = dom ? dom.length : 0;
for (let i = 0; i < len; i++) {
this[i] = dom[i]
}
this.length = len;
this.selector = selector || ""
}
append(node) {
//...
}
addClass() {
//...
}
}
//工厂模式挂载到 $
window.$ = function (selector) {
return new Jquery(selector);
}
//使用
console.log($('div'));
可以看出jquery使用的工厂模式,最后会把所有的功能都暴露给了window.$,而后我们直接使用$(‘’)就可以直接操作dom元素。
设计模式验证
- 构造函数和创建者分类
- 符合开放封闭原则