# 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.

- Singleton: una classe la cui istanza é sempre singola.
### Structural Patterns
- Adapter: per matchare interfacce diverse

- Bridge: per separare l'interfaccia di un oggetto dalla sua implementazione
- Decorator: per aggiungere responsabilitá/funzionalitá ad oggetti esistenti dinamicamente
{width=50%}
- Facade: una classe che rappresenta un insieme di altre classi e maschera la complessitá.

- 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.
{width=50%}
{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.

- State: un oggetto la cui configurazione cambia a seconda dello stato (che varia a runtime).

- 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