Modelli di progettazione orientati agli oggetti spiegati con esempi pratici

0 Comments

Modelli comportamentali

Questi tipi di pattern riguardano la comunicazione tra oggetti. Nella maggior parte dei casi le dipendenze tra gli oggetti comunicanti sono ridotte attraverso questi modelli che portano a una migliore progettazione del software.

Catena di responsabilità

Questo modello crea una catena di oggetti ricevitore per una richiesta. Evita l’accoppiamento del mittente di una richiesta al destinatario e offre a più oggetti la possibilità di gestire la richiesta. Gli oggetti riceventi sono collegati tra loro., Nell’esempio seguente viene costruita una catena di unità middleware. La richiesta, contenente email e password, viene inoltrata nella catena. Nuovi elementi nella catena possono essere facilmente aggiunti.

Comando

Nel modello di comando un oggetto viene utilizzato per incapsulare tutte le informazioni necessarie per eseguire un’azione o attivare un evento in un secondo momento. Come mostrato di seguito, ActionOpen definisce l’azione e l’oggetto su cui viene eseguita l’azione., Ulteriori informazioni non sono necessarie e un altro oggetto, qui menu, può eseguire l’azione.

Interprete

L’Interprete modello definisce una rappresentazione per la grammatica di una lingua e fornisce la capacità di interpretare le frasi di una lingua. Nel frammento di codice sotto un oggetto Plus può interpretare “operand1 + operand2” e sa cosa fare con quell’espressione. È possibile aggiungere più interpreti senza modificare troppo la struttura. Il Parser utilizza quindi gli interpreti per comprendere l’input.,

Iteratore

L’iteratore viene utilizzato per attraversare un contenitore di dati per accedere agli elementi del contenitore senza la necessità di conoscere la struttura sottostante. Inoltre, è possibile aggiungere nuove varianti di attraversamento senza modificare l’interfaccia degli oggetti o la struttura dei dati stessa.
Il ChannelSurfer, raffigurato di seguito, può accedere ai canali in modo consecutivo. L’oggetto RemoteControl non deve preoccuparsi di come sono organizzati i canali. Un RandomChannelSurfer, ad esempio, può essere aggiunto senza molti problemi.,

Mediatore

Se due o più oggetti devono cooperare, potrebbe essere applicato il modello Mediatore. Soprattutto se gli oggetti non si conoscono, se non dovrebbero essere strettamente accoppiati, o la loro interazione è complessa, questo modello può aiutare.
Nell’esempio seguente c’è qualche interazione necessaria tra gli elementi dell’interfaccia utente. Questa interazione avviene attraverso l’AutenticazioneDialog come Mediatore. In questo modo l’interazione non è definita in uno degli oggetti partecipanti, ma estratta nel mediatore.,

Memento

Il pattern Memento è utile se un determinato stato di un oggetto deve essere salvato per un uso successivo. In tal modo non viola l’incapsulamento dei dettagli di implementazione di quell’oggetto. Può ad esempio essere utilizzato per l’implementazione di un meccanismo di annullamento.

Observer

Nel modello observer gli oggetti observer si iscrivono a un oggetto osservabile per essere notificati ogni volta che l’observable cambia i suoi dati., Gli osservatori sono liberamente accoppiati e possono essere aggiunti e rimossi in fase di esecuzione.
Per quanto riguarda il modo in cui l’osservatore ottiene finalmente i dati dall’osservabile, ci sono due varianti: push e pull. Il codice seguente mostra la variante pull, che è più flessibile in quanto in questo caso l’osservabile non ha bisogno di sapere come l’osservatore desidera ricevere i dati, ma l’osservatore può recuperare i dati come desiderato.

Stato

Il pattern di stato consente a un oggetto di modificare il suo comportamento quando il suo stato interno cambia., Questo modello è simile al modello di strategia, ma in questo caso viene deciso internamente come si comportano gli oggetti. Ciò è particolarmente utile se condizioni complesse definiscono il comportamento dell’oggetto. Nuovi stati possono essere aggiunti indipendentemente dagli stati esistenti.

Strategia

Nel contesto del modello di strategia esistono più varianti per un algoritmo in cui viene scelta una variante da eseguire in fase di esecuzione.,
Nell’esempio seguente un oggetto Compressore può essere utilizzato con uno dei due diversi algoritmi definiti in fase di esecuzione. Il metodo che esegue l’azione (createArchive) applica quindi l’algoritmo scelto.

Modello

Il modello di modello definisce una struttura per sottoclassi in cui vengono definiti i passaggi di un algoritmo e il loro ordine. Ciò garantisce che le sottoclassi seguano esattamente gli stessi passaggi, fornendo una migliore panoramica e coerenza., Consente inoltre di definire implementazioni predefinite per i passaggi che possono essere sovrascritti dalle sottoclassi.
Come mostrato di seguito tutti i parser ereditati da DataParser seguono esattamente gli stessi passaggi quando viene eseguito parse (). Ciò garantisce ad esempio che tutti i parser chiudano i file e registrino lo stato.

Visitor

Il modello Visitor consente di applicare una o più operazioni a un insieme di oggetti in fase di esecuzione senza che le operazioni siano strettamente accoppiate con la struttura dell’oggetto.,
Questo consente di implementare la doppia spedizione in cui una chiamata di funzione a diverse funzioni concrete dipende dal tipo di runtime di due oggetti. Nell’esempio seguente da un lato ci sono elementi di percorso e dall’altro lato oggetti visitatori che eseguono funzioni diverse sugli elementi di percorso. Se ci sono più visitatori aggiunti in futuro, l’elemento percorso non ha bisogno di cambiare.


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *