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''' (modello, tipo di progettazione) può essere definito "una soluzione progettuale generale a un problema ricorrente". Esso non è una libreria o un componente di [[software]] riusabile, quanto una descrizione o un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software.
 
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.
* [[Anonymous subroutine objects]]
* 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("singolo") cuiha lo scopo scopo èdi assicurare che di una classe possa essere creata una sola istanza.
* 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]] (compostito"composto"), utilizzato per dare la possibilità all'utilizzatore di manipolare gli oggetti in modo uniforme, organizza gli oggetti in una struttura ad albero.
* [[Container pattern|Container]] ("contenitore")
* Il design pattern [[Decorator]] ("decoratore") consente di aggiungere metodi a classi esistenti durante il ''run-time'' (cioè durante lo svolgimento del programma), permettendo una maggior flessibilità nell'aggiungere delle funzionalità agli oggetti.
* [[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]] (delegato) fornisce una rappresentazione di un oggetto di accesso difficile o che richiede un tempo importante per l’accesso o creazione. Il Proxy consente di posticipare l’accesso o creazione al momento in cui sia davvero richiesto.
* [[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]] (internprete"interprete")
* 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’incapsulazionel'incapsulazione, e memorizzarlo per poterlo ripristinare in un momento successivo.
* 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 design patternLo [[Strategy pattern|Strategy]] ("strategia") è utile in quelle situazioni dove è necessario modificare dinamicamente gli algoritmi utilizzati da un'applicazione.
* 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==