# Java e Pattern Designs Classificazione patterns: - creazionali : riguardano la creazione di oggetti - strutturali : riguardano la composizione di classi - comportamentali : si occupano di come interagiscono tra loro gli oggetti ### Creational Patterns - Abstract Factory: crea istanze specifiche/appropriate usando la Concrete Factory - Concrete Factory: implementa l'interfaccia della AbstractFactory per far si che si fa il giusto override. Lo stesso (abstract/concrete) per i prodotti. ![](images/aab0ad5b4559fc21fb0f6b2a6ac9f4d2.png) - Singleton: una classe la cui istanza é sempre singola. ### Structural Patterns - Adapter: per matchare interfacce diverse ![adapter pattern](images/600317ac5f8e6982544a06458f2636f1.png) - Bridge: per separare l'interfaccia di un oggetto dalla sua implementazione - Decorator: per aggiungere responsabilitá/funzionalitá ad oggetti esistenti dinamicamente ![](images/4e680976401fcdb6beddf61e0ca14c17.png){width=50%} - Facade: una classe che rappresenta un insieme di altre classi e maschera la complessitá. ![Facade Pattern UML](https://www.javatpoint.com/images/designpattern/facadeuml.jpg) - Flyweight: un'istanza 'leggera' usata per condividere risorse - Proxy: Un oggetto che rappresenta un altro oggetto, in genere usato per evitare di istanziare oggetti pesante se non veramente necessari. ![](images/fc5d49e203cbe2e1458522aa6abdb794.png){width=50%} ![](images/7b2c30989300f431f55230e65a581cef.png){width=50%} ### Behavioral Patterns - Chain of Responsability: un modo per 'passare' una richiesta in una serie di classi a mo' di catena di montaggio nella quale ogni classe adempie alla propria responsabilitá. - Command: incapsula una richiesta in una classe command, per 'standardizzare' le richieste. - Iterator: per accedere sequenzialmente ad una collezione. - Mediator: per semplificare la comunicazione tra classi - Memento: per 'snapshottare' lo stato di una classe - Observer: un modo per notificare agli oggetti 'Listeners' o 'Observers' un cambiamento sul oggetto osservato. ![](images/e4545b61e6282aafc830bd4bddeb8c67.png) - State: un oggetto la cui configurazione cambia a seconda dello stato (che varia a runtime). ![](images/cf25a0bcd2e46d85a8a77089bef8c78f.png) - Strategy: incapsula gli algoritmi all'interno di una classe: utili per quei casi in cui é necessario cambiare/scegliere un algoritmo dinamicamente. - Comparator: Implementazione di una generica interfaccia Comprator per comparaare oggetti di tipi diversi. - Template Method - Visitor - MVC: - Model: dove risiede la logica dell'applicazione - View: visualizza i dati del Model - Controller: riceve i comandi dell’utente (generalmente attraverso il View) e li attua modificando lo stato degli altri due componenti