Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Los patrones de diseño son soluciones generales a problemas comunes en el diseño de software. Los siguientes son algunos patrones de diseño comunes, divididos en tres categorías principales: patrones de creación, patrones estructurales y patrones de comportamiento.
Estos patrones proporcionan mecanismos para la creación de objetos, aumentando la flexibilidad y la reutilización del código existente.
Patrón singleton:
Patrón de método de fábrica:
Patrón de fábrica abstracta (fábrica abstracta):
Patrón de constructor (Constructor):
Prototipo:
Estos patrones tratan de combinaciones de objetos o relaciones entre objetos y ellos.
Modo adaptador:
Patrón decorador (Decorador):
Modo proxy (Proxy):
Fachada:
Modo puente (Puente):
Modo compuesto:
Modo peso mosca:
Estos patrones se centran en la comunicación entre objetos, es decir, cómo los objetos interactúan y distribuyen responsabilidades.
Estrategia:
Patrón de método de plantilla (método de plantilla):
Patrón de observador (Observador):
Patrón iterador (iterador):
Modelo de cadena de responsabilidad:
Modo de comando (Comando):
Modo recuerdo:
Modo de estado:
Modo visitante:
Patrón mediador:
Modo intérprete (Intérprete):
Durante la última entrevista, me preguntaron sobre el uso de código para implementar el patrón suscriptor-editor. Tuve tiempo para simular estos patrones de diseño con código js.
Por ejemplo
class PubSub {
constructor() {
this.events = {}; // 存储事件名称和对应的订阅者回调函数数组
}
// 订阅事件
subscribe(event, callback) {
if (!this.events[event]) {
this.events[event] = []; // 如果事件不存在,初始化一个空数组
}
this.events[event].push(callback); // 将回调函数添加到订阅者的数组
}
// 取消订阅事件
unsubscribe(event, callback) {
if (!this.events[event]) {
return;
}
this.events[event] = this.events[event].filter(cb => cb !== callback); // 移除指定的回调函数
}
// 取消特定事件的所有订阅
unsubscribeAll(event) {
if (this.events[event]) {
delete this.events[event]; // 删除所有订阅者
}
}
// 触发事件,使用 emit 作为方法名
emit(event, data) {
if (this.events[event]) {
// 执行所有订阅者的回调函数
this.events[event].forEach(callback => callback(data));
}
}
// 检查是否有订阅者
hasSubscribers(event) {
return this.events[event] && this.events[event].length > 0;
}
}
// 使用示例
const eventCenter = new PubSub();
// 订阅 'message' 事件
eventCenter.subscribe('message', (data) => {
console.log(`Message received: ${data}`);
});
// 订阅 'greet' 事件
eventCenter.subscribe('greet', (name) => {
console.log(`Hello, ${name}!`);
});
// 触发 'message' 事件
eventCenter.emit('message', 'Hello, Pub/Sub!');
// 触发 'greet' 事件
eventCenter.emit('greet', 'World');
// 取消对 'message' 事件的订阅
const myCallback = (data) => {
console.log(`My callback received: ${data}`);
};
eventCenter.subscribe('message', myCallback);
eventCenter.unsubscribe('message', myCallback);
// 再次触发 'message' 事件,myCallback 不会被调用
eventCenter.emit('message', 'This message will not be received by myCallback');
En este ejemplo,PubSub
La clase proporciona la siguiente funcionalidad:
subscribe
El método permite a los suscriptores registrar una función de devolución de llamada para un evento específico.unsubscribe
El método permite a los suscriptores cancelar el registro de sus funciones de devolución de llamada de eventos específicos.unsubscribeAll
El método cancela todas las suscripciones a un evento específico.emit
El método desencadena el evento y ejecuta las funciones de devolución de llamada de todos los suscriptores.hasSubscribers
El método comprueba si hay suscriptores para un evento específico.