必问
观察者模式
定义对象 一对多的 依赖关系,多个观察者监听一个 一个主题对象,主题对象改变,会通知 观察者 进行自动更新
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;
}
}