mercoledì 21 dicembre 2011

Appunti base relativi ai Design Patterns

Appunti sui Design patterns:
appunti design patterns
I design patterns sono suddivisi in queste tre principali categorie:

Creationals (Creazionali):
  • Permettono di astrarre il processo di creazione degli oggetti
  • Rendono un sistema indipendente da come i suoi oggetti sono stati creati, composti e rappresentati
  • Incapsulano la conoscenza sulle classi concrete che un sistema usa
  • Nascondono l'implementazione delle classi e della loro creazione
da immagine appunti design patterns
1.1, Creational
  1.1.1, AbstractFactory
    1.1.1.1, Crea oggetti che appartengono alla stessa famiglia e sono connessi o dipendenti tra loro
    1.1.1.2, Possibilità di utilizzare una famiglia diversa di prodotti a seconda della factory usata. L'interfaccia del client non cambia
  1.1.2, FactoryMethod
    1.1.2.1, Fornische un interfaccia per creare un oggetto ma sono le sottoclassi a decidere cosa istanziare
  1.1.3, Prototype
    1.1.3.1, Crea nuovi oggetti clonando quello base
  1.1.4,  Builder
    1.1.4.1, Separa la costruzione di un oggetto complesso dalla sua rappresentazione.  Lo stesso costruttore puó creare più rappresentazioni diverse
  1.1.5, Singleton 
    1.1.5.1, Fa in modo che una classe abbia una sola istanza e possa essere usata da tutti

Structural (Strutturali):
  • Sono dedicati alla composizione di classi e oggetti per creare delle strutture più grandi
  • Gli Structural class pattern utilizzando l'ereditarietà per creare interfacce o implementazioni
  • Gli Structural object pattern descrivono il modo in cui comporre gli oggetti per realizzare nuove funzionalità
da immagine appunti design patterns
1.2, Structural
  1.2.1, Proxy
    1.2.1.1, Inizializzare un oggetto solo quando viene chiamato il metodo
  1.2.2, Bridge
    1.2.2.1, Separa cosa si puó fare da cosa si fà
    1.2.2.2, Permette di eseguire la stessa operazione ma in maniera diversa a seconda del caso
    1.2.2.3, Costruisce un oggetto composto da varie parti.  Le parti che servono sono dinamiche a seconda del builder usato
  1.2.3, Facade
    1.2.3.1, Interfaccia di alto livello per richiamare sottosistemi diversi
  1.2.4, Adapter
    1.2.4.1, Adatta l'interfaccia di un elemento alla richiesta del client
  1.2.5, Decorator
    1.2.5.1, Aggiunge metodi all'oggetto in maniera dinamica
    1.2.5.2, Propone alternativa all'ereditarietà (anche multipla)
  1.2.6, Flyweight
    1.2.6.1, Condivide la parte riusabile di un oggetto
    1.2.6.2, La factory estra un oggetto dalla collezione interna o lo crea nuovo per risparmiare memoria, istanziando l'oggetto normalmente si accede alla parte non condivisa
  1.2.7, Composite
    1.2.7.1, Crea oggetti in strutture ad albero
    1.2.7.2, Esempio: il trapezio è composto da 2 triangoli e un rettangolo


Behavioral (Comportamentali):
  • Si focalizzano sul controllo di flusso degli oggetti
  • Descrivono le comunicazioni fra gli oggetti
  • Aiutano a valutare le responsabilità assegnate agli oggetti
  • Suggeriscono modi per incapsulare algoritmi dentro classi
da immagine appunti design patterns
1.3, Behavioral
  1.3.1, TemplateMethod
    1.3.1.1, Permette di variare una parte di un algoritmo e non toccare il resto
  1.3.2, Strategy
    1.3.2.1, Crea una classe con algoritmi intercambiabili ma interfaccia per richiamarli uguale
  1.3.3, Observer
    1.3.3.1, Crea eventi che si scatenano in tutti gli oggetti registrati quando viene notificato dall'oggetto principale
  1.3.4, Mediator
    1.3.4.1, Permette l'iterazione fra oggetti senza che uno abbia a che fare con l'altro
    1.3.4.2, L'oggetto principale incapsula l'iterazione fra gli oggetti contenuti
  1.3.5, State
    1.3.5.1, Cambia il comportamento a run-time dell'oggetto a seconda dello stato in cui si trova
  1.3.6, Interpreter
    1.3.6.1, Trasforma una sintassi, un linguaggio in entrata e interpretandone le espressioni produce un risultato in uscita
    1.3.6.2, L'interpreter precisa come valutare le frasi in una determinata lingua o linguaggio
  1.3.7, Visitor
    1.3.7.1, Rappresenta un operazione che puó essere eseguita sugli elementi di una struttura oggetto. 
    1.3.7.2, Permette di definire una nuova operazione senza modificare la struttura stessa
    1.3.7.3, Delega una funzionalità a una gerarchia di classi senza inquinarle
    1.3.7.4, Separa un algoritmo dalla struttura di oggetti compositi a cui è applicato
    1.3.7.5, Il visitor incapsula la funzionalità e la gerarchia viene dotata solo di un metodo per accedere ad uno di questi visitor
  1.3.8, Command
    1.3.8.1, Isola la porzione di codice che effettua un azione dal codice che ne richiede l'esecuzione; l'azione è incapsulata nell'oggetto command
    1.3.8.2, Utile da usare per associare azioni dell'interfaccia grafica(esempio click sul un bottone) al codice che esegue l'azione
  1.3.9, Iterator
    1.3.9.1, Fornisce un metodo per accedere agli oggetti di una collezione senza esporli direttamente
  1.3.10, Memento
    1.3.10.1, Estrae lo stato di un oggetto per ripristinarlo successivamente (come undo)
  1.3.11, Chain of responsability
    1.3.11.1, Separa oggetti che fanno le richieste da quelli che le gestiscono
    1.3.11.2, Usa un determinato oggetto che si incarica di soddisfare la richiesta effettuata