1.单例模式
- 1.定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
class Singleton {
constructor() {
if (!Singleton.instacne) {
Singleton.instacne = this
}
return Singleton.instacne
}
}
- 2.优点:
(1)唯一实例:单例模式确保一个类只有一个实例,避免重复创建资源。
(2)共享资源:由于只存在一个实例,所以它可以方便的共享数据,使得数据的访问和操作更为集中和一致。
2.观察者模式
- 1.定义:观察者模式用于在对象之间建立一种一对多的依赖关系,这样当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。
class Subject {
constructor() {
this.obervers = []
}
subscribe(obs) {
this.obervers.push(obs)
}
unsubscribe(obs) {
this.obervers = this.obervers.filter(item => item !== obs)
}
nofity(data) {
this.obervers.forEach(obs => {
obs.update(data)
})
}
}
class Observer {
constructor(name) {
this.name = name
}
update(data) {
console.log(`${this.name}收到的数据:${data}`);
}
}
const sub = new Subject()
const obs1 = new Observer('obs1')
const obs2 = new Observer('obs2')
sub.subscribe(obs1)
sub.subscribe(obs2)
sub.nofity('Hello')
sub.unsubscribe(obs1)
sub.nofity('JS')
3.发布订阅模式
- 1.定义:发布订阅模式是一种消息通信模式,用于在系统的不同部分之间传递特定的事件信息。这种模式类似于广播:一个发布者发送消息,但并不知道谁将接收它;其他订阅者可以订阅这些消息并对它们作出响应,而无需知道是哪个发布者发布了这些消息。
class PubSub {
constructor() {
this.subscribers = {}
}
// 订阅
subscribe(topic, callback) {
if (!this.subscribers[topic]) {
this.subscribers[topic] = []
}
this.subscribers[topic].push(callback)
return () => {
this.unsubscribe(topic, callback)
}
}
// 取消订阅
unsubscribe(topic, callback) {
if (this.subscribers[topic]) {
this.subscribers[topic] = this.subscribers[topic].filter(item => item !== callback)
}
}
// 发布
publish(topic, data) {
if (this.subscribers[topic]) {
this.subscribers[topic].forEach(cb => {
cb(data)
})
}
}
}
const pubSub = new PubSub()
const subscribe = pubSub.subscribe('news', data => console.log(`收到的信息:${data}`))
pubSub.publish('news', 'hello')
subscribe()
pubSub.publish('news', 'hello')
- 2.观察者模式和发布订阅模式有什么区别?
(1)观察者模式
- 直接通信:在观察者模式中,被观察者与观察者直接通信。
- 依赖关系:观察者与被观察者有明确的依赖关系。观察者需要明确地注册到特定的被观察者身上。
(2)发布订阅模式
- 间接通信:在发布订阅模式中,发布者与订阅者不直接交互。发布者发布消息到一个中间层,订阅者订阅这些通道或主题,而不是订阅发布者。
- 解耦关系:发布者和订阅者之间耦合度更低,它们不需要知道对方的存在。