工厂模式
工厂模式是一种用来创建对象的设计模式。我们不暴露对象创建的逻辑,而是将逻辑封装在一个函数内,那么这个函数可以成为工厂。工厂模式根据抽象程度的不同可以分为: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()// 通过工厂创建 Productlet 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元素。
设计模式验证
- 构造函数和创建者分类
- 符合开放封闭原则
