必問
觀察者模式
定義對象 一對多的 依賴關係,多個觀察者監聽一個 一個主題對象,主題對象改變,會通知 觀察者 進行自動更新
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 | 雙向數據綁定 、父子組件通信 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;
}
}