le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
I design pattern sono soluzioni generali a problemi comuni nella progettazione del software. Di seguito sono riportati alcuni modelli di progettazione comuni, suddivisi in tre categorie principali: modelli creazionali, modelli strutturali e modelli comportamentali.
Questi modelli forniscono meccanismi per la creazione di oggetti, aumentando la flessibilità e la riusabilità del codice esistente.
Modello singleton:
Modello del metodo di fabbrica:
Modello astratto di fabbrica (Fabbrica astratta):
Modello costruttore (Costruttore):
Prototipo:
Questi modelli riguardano combinazioni di oggetti o relazioni tra gli oggetti e loro.
Modalità adattatore:
Modello decoratore (Decoratore):
Modalità proxy (Proxy):
Facciata:
Modalità Bridge (Ponte):
Modalità composita:
Modalità peso mosca:
Questi modelli si concentrano sulla comunicazione tra oggetti, ovvero su come gli oggetti interagiscono tra loro e su come distribuiscono le responsabilità.
Strategia:
Modello del metodo modello (metodo modello):
Modello osservatore (Osservatore):
Modello iteratore (Iteratore):
Modello di catena di responsabilità:
Modalità di comando (Comando):
Modalità ricordo:
Modalità di stato:
Modalità visitatore:
Modello mediatore:
Modalità interprete (Interprete):
Durante l'ultima intervista, mi è stato chiesto se utilizzare il codice per implementare il modello abbonato-editore. Ho avuto il tempo di simulare questi modelli di progettazione con il codice js.
Per esempio
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');
In questo esempio,PubSub
La classe fornisce le seguenti funzionalità:
subscribe
Il metodo consente agli abbonati di registrare una funzione di richiamata per un evento specifico.unsubscribe
Il metodo consente agli abbonati di annullare la registrazione delle proprie funzioni di richiamata da eventi specifici.unsubscribeAll
Il metodo annulla tutte le iscrizioni a un evento specifico.emit
Il metodo attiva l'evento ed esegue le funzioni di callback di tutti gli abbonati.hasSubscribers
Il metodo controlla se ci sono iscritti per un evento specifico.