Quali modelli di progettazione GOF sono già implementati come funzionalità di linguaggio di prima classe in C #?


10

(Questa domanda è stata chiusa su Stack Overflow perché "troppo ampia" e "non una vera domanda", quindi forse è più appropriato qui?)

Ispirato da questa domanda . Sappiamo che gli eventi sono un'implementazione a livello di linguaggio del modello Observer. Esistono altri modelli di progettazione implementati come funzionalità del linguaggio in C #? Voglio mantenere questa domanda specifica per C # perché ci sono molti modelli di progettazione implementati in altre lingue e voglio mantenerlo concentrato.

Non sto cercando implementazioni di modelli nel BCL (come decoratore in molte classi WCF o Metodo di fabbrica in WebClient), ma modelli a livello di linguaggio .

Finora sono a conoscenza di observer ( event) e iteratore ( foreachin combinazione con molte classi e interfacce BCL). Probabilmente ci sono altri ovvi che mi mancano.

Risposte:


1

I delegati sono di fatto strategie strategiche


divertente, proprio ieri un collega stava dicendo che i delegati sono un'implementazione del modello di comando. Dipende da come lo guardi immagino (il comando afaik dovrebbe incapsulare anche gli argomenti, ma nel caso di un metodo senza argomenti ..)
stijn

1
Non direi che i delegati sono implementazione di schemi di comando, almeno non riesco a vedere come si possano implementare cose come annulla / ripristina usando solo i delegati. Potrebbero far parte di un oggetto comando, ma questa è un'altra questione
Homde,

0

I metodi di estensione sono un'astrazione del motivo Decoratore.


Non proprio. Decorator ci consente di comporre oggetti in fase di esecuzione per aggiungere dati e comportamento.
Martin Doms

1
Vero - quindi non sono così utili come i veri motivi decoratori. Sarebbe meglio dire che molti dei problemi risolti dai metodi di estensione sono risolti con motivi decorativi in ​​altre lingue?
vstrien,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.