Inizia una serie di articoli dedicati ai principali design pattern della programmazione ad oggetti.

La prima cosa da fare è chiarire cos'è un pattern. Per pattern si intende un metodo preciso di svolgere un determinato lavoro, frutto dell'esperienza maturata. Esso, pertanto, costitusce un modo per risolvere un determinato problema, ma non è l'unico e starà al programmatore scegliere di volta in volta se affidarsi ad un pattern o ad una soluzione differente. Si tratta di valutare di volta in volta il grado di complessità della soluzione e scegliere la strada migliore.

In questo primo articolo vedremo una carrellata dei principali design pattern, che approfondiremo di volta in volta in articoli dedicati.

Adapter

Viene usato quando occorre adattare il nostro codice alle esigenze di un client, fuori dal nostro controllo.

Facade

Viene usato quando si vuole una interfaccia di alto livello che nasconde la complessità del sottosistema cui si appoggia.

Composite

Viene usato quando occorre modellare oggetti in cui alcuni elementi possono contenere gruppi di oggetti. Un tipico esempio è l'albero.

Bridge

Viene usato quando si vuole disaccoppiare una astrazione dalla sua implementazione. Un tipico esempio sono i driver.

Singleton

Viene usato quando si vuole che una classe abbia una sola istanza e un solo punto di accesso ad essa.

Observer

Viene usato per gestire il caso in cui più oggetti dipendono dal comportamento di uno specifico oggetto.

Mediator

Viene usato quando si vuole centralizzare le regole di interazione tra un gruppo di oggetti.

Proxy

Viene usato quando si vuole demandare ad un altro oggetto l'accesso alle proprie funzionalità.

Chain Of Responsability

Viene usato quando si vuole consentire a più oggetti di gestire una chiamata in sequenza, ognuno responsabile di una determinata azione

Builder

Viene usato quando si vuole spostare la logica della costruzione della classe al di fuori della classe stessa.

Abstract Factory

Viene usato quando si consente ad un client di poter istanziare oggetti che fanno parte di una famiglia di classi correllate

Prototype

Viene usato quando si istanzia un nuovo oggetto a partire da una già presente

Template Method

Viene usato quando si rimanda la definizione di un algoritmo ad una sottoclasse. Tipico esempio è l'interfaccia Comparator.

State

Viene usato quando si è in presenza di una logica a stati e la si distribuisce su più classi.

Command

Viene usato quando si incapsula una richiesta all'interno di un oggetto, che sarà invocabile da un client. Tipico esempio sono i menù.

Decorator

Viene usato quando si vuole estendere il comportamento di un oggetto esistente.

Iterator

Viene usato quando si vuole consentire ad un client di accedere sequenzialmente agli elementi di una collezione.

Alla prossima