18.什么是设计模式?
时间: 2024-01-09 07:05:38 浏览: 25
设计模式是在软件设计中,针对常见问题的解决方案的通用、可重用的解决方案。它是一种经过反复验证的、被广泛使用的、可用于解决特定问题的设计思想。设计模式可以帮助开发人员更好地理解软件系统,并提供了一种标准的方法来解决常见的软件设计问题。常见的设计模式包括单例模式、工厂模式、观察者模式等。使用设计模式可以提高代码的可读性、可维护性和可扩展性。
相关问题
18.什么是发布订阅模式,写出其核心实现代码?
发布订阅模式是一种常用的设计模式,它允许我们定义对象间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。发布订阅模式的核心在于发布者和订阅者之间的解耦,发布者不需要知道订阅者的存在,订阅者也不需要知道发布者的存在,它们只需要知道消息的名称或者类型即可。
以下是发布订阅模式的核心实现代码:
```
class EventEmitter {
constructor() {
this.events = {};
}
on(eventName, listener) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(listener);
}
emit(eventName, ...args) {
if (this.events[eventName]) {
this.events[eventName].forEach(listener => listener.apply(null, args));
}
}
off(eventName, listener) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(l => l !== listener);
}
}
once(eventName, listener) {
const onceListener = (...args) => {
this.off(eventName, onceListener);
listener.apply(null, args);
};
this.on(eventName, onceListener);
}
}
```
以上代码实现了一个简单的EventEmitter类,它包含了四个方法:on、emit、off和once。其中,on方法用于订阅事件,emit方法用于发布事件,off方法用于取消订阅事件,once方法用于订阅一次性事件。
使用示例:
```
const eventEmitter = new EventEmitter();
// 订阅事件
eventEmitter.on('click', e => console.log(`clicked: ${e}`));
eventEmitter.on('hover', e => console.log(`hovered: ${e}`));
// 发布事件
eventEmitter.emit('click', 'button');
eventEmitter.emit('hover', 'link');
// 取消订阅事件
const clickHandler = e => console.log(`clicked: ${e}`);
eventEmitter.on('click', clickHandler);
eventEmitter.off('click', clickHandler);
// 订阅一次性事件
eventEmitter.once('load', () => console.log('loaded'));
eventEmitter.emit('load');
eventEmitter.emit('load'); // 不会触发事件
```
常用的设计模式有哪些?
常用的设计模式有以下几种:
1. 单例模式
2. 工厂模式
3. 抽象工厂模式
4. 建造者模式
5. 原型模式
6. 适配器模式
7. 桥接模式
8. 装饰器模式
9. 组合模式
10. 外观模式
11. 享元模式
12. 代理模式
13. 观察者模式
14. 迭代器模式
15. 模板方法模式
16. 策略模式
17. 职责链模式
18. 命令模式
19. 备忘录模式
20. 状态模式
21. 访问者模式
22. 解释器模式
不同的模式有着不同的应用场景,可以根据具体需求选择合适的设计模式。