Modelli di progettazione
Modelli di design creazionale
Singleton: assicurarsi che venga creata solo un'istanza di una classe e fornire un punto di accesso globale all'oggetto.
Factory (versione semplificata del metodo Factory): crea oggetti senza esporre la logica di istanza al client e fa riferimento all'oggetto appena creato tramite un'interfaccia comune.
Metodo di fabbrica: definisce un'interfaccia per la creazione di oggetti, ma consente alle sottoclassi di decidere quale classe creare un'istanza e fa riferimento all'oggetto appena creato tramite un'interfaccia comune.
Fabbrica astratta: offre l'interfaccia per la creazione di una famiglia di oggetti correlati, senza specificare esplicitamente le loro classi.
Builder: definisce un'istanza per la creazione di un oggetto ma consente alle sottoclassi di decidere quale classe creare un'istanza e consente un controllo più preciso sul processo di costruzione.
Prototipo: specificare i tipi di oggetti da creare utilizzando un'istanza prototipica e creare nuovi oggetti copiando questo prototipo.
Modelli di progettazione comportamentale
Catena di responsabilità - Evita di allegare il mittente di una richiesta al suo destinatario, dando così ad altri oggetti la possibilità di gestire anche la richiesta. - Gli oggetti diventano parti di una catena e la richiesta viene inviata da un oggetto all'altro attraverso la catena fino a quando uno degli oggetti lo gestirà.
Comando: incapsula una richiesta in un oggetto, consente la parametrizzazione di client con richieste diverse e consente di salvare le richieste in una coda.
Interprete - Data una lingua, definisci una rappresentazione per la sua grammatica insieme a un interprete che usa la rappresentazione per interpretare frasi nella lingua / Mappa un dominio su una lingua, la lingua su una grammatica e la grammatica su un disegno gerarchico orientato agli oggetti
Iteratore: fornisce un modo per accedere agli elementi di un oggetto aggregato in sequenza senza esporre la sua rappresentazione sottostante.
Mediatore: definisce un oggetto che incapsula il modo in cui un insieme di oggetti interagisce. Il mediatore promuove l'accoppiamento libero impedendo agli oggetti di riferirsi esplicitamente tra loro e consente di variare la loro interazione in modo indipendente.
Osservatore: definire una dipendenza uno-a-molti tra gli oggetti in modo che quando un oggetto cambia stato, tutti i suoi dipendenti vengono notificati e aggiornati automaticamente.
Strategia: definire una famiglia di algoritmi, incapsulare ciascuno di essi e renderli intercambiabili. La strategia consente all'algoritmo di variare indipendentemente dai client che lo utilizzano.
Metodo modello: definisce lo scheletro di un algoritmo in un'operazione, rimandando alcuni passaggi alle sottoclassi / Metodo modello consente alle sottoclassi di ridefinire determinati passaggi di un algoritmo senza consentire loro di modificare la struttura dell'algoritmo.
Visitatore - Rappresenta un'operazione da eseguire sugli elementi di una struttura di oggetti / Visitatore consente di definire una nuova operazione senza modificare le classi degli elementi su cui opera.
Null Object: fornisce un oggetto come surrogato della mancanza di un oggetto di un determinato tipo. / The Null Object Pattern fornisce un comportamento intelligente senza fare nulla, nascondendo i dettagli dai suoi collaboratori.
Modelli di progettazione strutturale
Adattatore: converte l'interfaccia di una classe in un'altra interfaccia che i clienti si aspettano. / Adapter consente alle classi di lavorare insieme, cosa che altrimenti non potrebbe a causa di interfacce incompatibili.
Bridge: componi gli oggetti in strutture ad albero per rappresentare gerarchie intere. / Composito consente ai clienti di trattare i singoli oggetti e composizioni di oggetti in modo uniforme.
Composito: componi gli oggetti in strutture ad albero per rappresentare gerarchie intere. / Composito consente ai clienti di trattare i singoli oggetti e composizioni di oggetti in modo uniforme.
Decoratore: aggiungi ulteriori responsabilità in modo dinamico a un oggetto.
Flyweight: utilizzare la condivisione per supportare un gran numero di oggetti che hanno una parte del loro stato interno in comune dove l'altra parte dello stato può variare.
Memento: cattura lo stato interno di un oggetto senza violare l'incapsulamento e fornendo così un mezzo per ripristinare l'oggetto nello stato iniziale quando necessario.
Proxy: fornisce un "segnaposto" affinché un oggetto controlli i riferimenti ad esso.