js设计模式2

250 阅读1分钟

1.单例模式

① 系统中被唯一使用
② 一个类只有一个实例

例子: 登陆框  购物车  juery  vuex/store
// 单例模式(登陆)
class singleObjec{
     login() {
        console.log('login...')
     }
  }
// 静态资源立即执行方法,只执行一次,初始化闭包变量 instance
singleObjec.getSingObject = (function(){
  let instance
  return function() {
    if(instance) {
       instance = new singleObjec()
    }
    return instance
  }
})()

let login1 = singleObjec.getSingObject();
login1.login();

let login2 = singleObjec.getSingObject();
login2.login();
console.log(login1 === login2)  //true  单例模式,每次初始化实例相同,不会每次重新初始化新实例

let login3 =  new singleObjec();
login3.login();
console.log(login1 === login3)  //false  无法o控制实例生成,下面会讲解

// 例子: 如防止jquery 引入多次 ,利用单例原理,实现引入多次,只实例化 一个
if(window.jquery !== null) {
   return window.jquery
} else {
    // 初始化....
}

// vuex 中store是单例模式

2.工厂模式介绍

  ① 将new操作单独封装
  ② 遇到new时,就要考虑是否使用工厂模式
    // product 是 creator的子类
    class product {
        constructor(name) {
            this.name = name
        }
        int() {
            console.log('init')
        }
        fun1() {
            console.log('fun1')
        }
        fun2() {
            console.log('fun2')
        }
    }

    class creator {
        create(name) {
            return new product(name)
        }
    }

    const create1 = new creator();
    const p = create1.create('汉堡包');
    p.int();
    p.fun1();

3.适配器模式

    中间层做转换
    class adaptee {
        spelicRequest() {
            return `德国标准转化头`
        }
    }

    class Target {
        constructor() {
            this.adaptee = new adaptee()
        }
        request() {
            let info = this.adaptee.spelicRequest();
            return `${info} -> 正在转换 -> 中国标准头`
        }
    }
    
适配器例子:
  ① ajax 新旧场景不兼容,将老调用ajax({}} 转为 $.ajax()
    ajax({
            type: 'post',
            url: '/getInfo',
            data: {
                id: '12'
            },
        })
    // 新场景 $.ajax(...),利用适配器模式 实现转换
    var $ = {
        ajax: function(options) {
            return ajax(options)
        }
    }
    
 ② vue中的计算属性 computer,通过computer中间件修改数据并返回新数据。
 
    使用原则:
    将旧接口和使用者进行分离,中间加适配器进行分离
    符合开放封闭原则
  1. 装饰器模式 为对象添加新功能 不改变其原有的结构和功能