在我心中---設計模式(有空再繼續)

必問

在這裏插入圖片描述

觀察者模式

定義對象 一對多的 依賴關係,多個觀察者監聽一個 一個主題對象,主題對象改變,會通知 觀察者 進行自動更新

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;
    }
}

 

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