在我心中---设计模式(有空再继续)

必问

在这里插入图片描述

观察者模式

定义对象 一对多的 依赖关系,多个观察者监听一个 一个主题对象,主题对象改变,会通知 观察者 进行自动更新

class Subject{
    constructor() {
        this.observers = [];
    }
    add(obj){
        this.observers.push(obj)
    }
    remove(obj){
        this.observers = this.observers.filter(curr=>{return curr != obj})
    }
    notify(){
        this.observers.forEach(curr=>{
            curr.update();
        })
    }
}
class Observer{
    constructor(name) {
        this.name = name
    }
    update(){
        console.log('------this.name = ',`${this.name}`)
    }
}


let obj1 = new Observer('小李');
let obj2 = new Observer('小东');
let subject = new Subject();

subject.add(obj1)
subject.add(obj2)
subject.notify();  //  通知我变了 ,爱我的人 ,你们选择下

订阅发布模式

和观察者类似,主要区别 是有个中间层 ,由中间层对两端数据进行 触发 绑定
参考:https://baijiahao.baidu.com/s?id=1649464351438032712&wfr=spider&for=pc
添加链接描述

常用 Way
Jquery on 和 trigger
Vue 双向数据绑定 、父子组件通信 on/on/emit
 let Sub = {
    data :{
        list:{}
    },
     subscribe(key ,fn){
        let {list} = this.data;
        if(!(key in list) )list[key] = [];
         list[key].push(fn);
         this.data.list = list;
     },
     publish(key,...arg){
        let {list} = this.data,curr = list[key],$t = this;
          curr.forEach(obj=>{
              obj.call($t,...arg)
          })

     }

 }

 let eventM = {
    click:"click"
 }
 Sub.subscribe(eventM.click,(data)=>{
     console.log(data)
 })

 Sub.publish(eventM.click,"666666")


基本问题(争取聊聊多个 设计模式)

单列模式

保证一个特定类只有一个实例,第二次使用同一个类创建新对象的时候,应该得到与第一次创建对象完全相同的对象

1、 直接创建一个对象

var Singleton = {
    attr1: 1,
    attr2: 2,
    method1: function(){
        return this.attr1;
    },
    method2: function(){
        return this.attr2;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章