Design pattern: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 1:
{{nota disambigua|descrizione=il libro|titolo=[[Design Patterns]]}}
Nell'[[ingegneria del software]], un '''design pattern'''
La differenza tra un [[algoritmo]] e un design pattern (modello di progettazione) è che il primo risolve problemi computazionali, mentre il secondo è legato agli aspetti progettuali del software.
Riga 31:
I pattern creazionali nascondono i costruttori delle classi e mettono dei metodi al loro posto creando un'interfaccia. In questo modo si possono utilizzare oggetti senza sapere come sono implementati.
* L'[[Abstract factory]] (letteralmente, "fabbrica astratta") fornisce un'interfaccia per creare famiglie di oggetti connessi o dipendenti tra loro, in modo che non ci sia necessità da parte degli utilizzatori di specificare i nomi delle classi concrete all'interno del proprio codice.
* Il [[Builder]] ("costruttore") separa la costruzione di un oggetto complesso dalla sua rappresentazione, in modo che il processo di costruzione stesso possa creare diverse rappresentazioni.▼
* Il [[Factory method]] ("metodo fabbrica") fornisce un'interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.▼
▲* Il [[Builder]] (costruttore) separa la costruzione di un oggetto complesso dalla sua rappresentazione, in modo che il processo di costruzione stesso possa creare diverse rappresentazioni.
* La [[Lazy initialization]] ("inizializzazione pigra") è la tattica di instanziare un oggetto solo nel momento in cui deve essere usato per la prima volta. È utilizzato spesso insieme al pattern ''factory method''.▼
▲* Il [[Factory method]] (metodo fabbrica) fornisce un'interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.
* Il [[Prototype]] ("prototipo") permette di creare nuovi oggetti clonando un'oggetto iniziale, o prototipo. ▼
▲* La [[Lazy initialization]] (inizializzazione pigra) è la tattica di instanziare un oggetto solo nel momento in cui deve essere usato per la prima volta. È utilizzato spesso insieme al pattern ''factory method''.
* Il [[Singleton]]
▲* Il [[Prototype]] (prototipo) permette di creare nuovi oggetti clonando un'oggetto iniziale, o prototipo.
▲* [[Singleton]], il cui scopo è assicurare che di una classe possa essere creata una sola istanza.
===Pattern strutturali===
I pattern strutturali consentono di riutilizzare degli oggetti esistenti fornendo agli utilizzatori un'interfaccia più adatta alle loro esigenze.
* L'[[Adapter pattern|Adapter]] ("adattatore") converte l'interfaccia di una classe in una interfaccia diversa
* [[Bridge pattern|Bridge]] ("ponte") permette di separare l'astrazione di una classe dalla sua implementazione, per permettere loro di variare indipendentemente.
* Il [[Composite]] (
* [[Container pattern|Container]] ("contenitore")
* Il
* [[Extensibility pattern|Extensibility]] ("estendibilità")
* Il [[Façade pattern|Façade]] ("facciata") permette, attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfaccie complesse e diverse tra loro.
* [[Flyweight pattern|Flyweight]] ("peso piuma"), che permette di separare la parte variabile di una classe dalla parte che può essere riutilizzata.
* [[Proxy pattern|Proxy]]
* [[Pipes and filters|Pipes and filters]] ("condotti e filtri")
* [[Private class data pattern|Private class data]] ("dati di classe privati")
===Pattern comportamentali===
I pattern comportamentali forniscono soluzione alle più comuni tipologie di interazione tra gli oggetti.
* [[Chain of responsibility pattern|Chain of Responsibility]] ("catena di responsabilità") diminuisce l'accoppiamento fra l'oggetto che effettua una richiesta e quello che la soddisfa, dando a più oggetti la possibilità di soddisfarla
* Il [[Command pattern|Command]] ("comando") permette di isolare la porzione di codice che effettua un'azione dal codice che ne richiede l'esecuzione.
* [[Event listener|Event Listener]] ("ascoltatore di eventi")
* [[Hierarchical visitor pattern|Hierarchical Visitor]] ("visitatore di gerarchia")
* [[Interpreter pattern|Interpreter]] (
* L'[[Iterator (design pattern)|Iterator]] ("iteratore") risolve diversi problemi connessi all'accesso e alla navigazione attraverso gli elementi di una struttura dati, senza esporre i dettagli dell'implementazione e della struttura interna del contenitore.
* Il [[Mediator pattern|Mediator]] ("mediatore") si interpone nelle comunicazioni tra oggetti, allo scopo di aggiornare lo stato del sistema quando uno qualunque di essi comunica un cambiamento del proprio stato.
* Il design pattern [[Memento pattern|Memento]] ("promemoria") è l'operazione di estrarre lo stato interno di un oggetto, senza violarne
* L'[[Observer pattern|Observer]] ("osservatore") definisce una dipendenza uno a molti fra oggetti diversi, in maniera tale che se un oggetto cambia il suo stato, tutti gli oggetti dipendenti vengono notificati del cambiamento avvenuto e possono aggiornarsi.
* [[Single-serving visitor pattern|Single-serving Visitor]]
* [[State pattern|State]] ("stato") permette ad un oggetto di cambiare il suo comportamento al cambiare di un suo stato interno.
*
* Il [[Template method]] ("metodo schema") permette di definire la struttura di un algoritmo lasciando alle sottoclassi il compito di implementarne alcuni passi come preferiscono.
* Il [[Visitor]] ("visitatore") permette di separare un algoritmo dalla struttura di oggetti composti a cui è applicato, in modo da poter aggiungere nuovi comportamenti senza dover modificare la struttura stessa.
==Altri tipi di pattern==
|