Post

Strategy

In Design Patterns on marzo 28, 2010 by poyblog Messo il tag: ,

Intento:

Definire una famiglia di algoritmi, incapsularli tutti e renderli intercambiabili. Il pattern Startegy infatti lascia che gli algoritmi possano variare in base a chi e come li richiama.

Applicabilità:

Il pattern è da utilizzare quando:

  • ci sono molte classi relazionate che differiscono solo per il loro comportamento. Strategy fornisce un metodo per configurare una classe con uno dei tanti comportamenti.
  • C’è bisogno di differenti varianti di un algoritmo.
  • Un algoritmo utilizza dati che i colui che li richiama non conosce.
  • Una classe definisce molti comportamenti ed esegue una serie di istruzioni condizionali multiple. Invece di molte istruzioni condizionali, ognuna viene inserita all’interno della propria classe Strategy

Partecipanti:

  • Startegy → dichiara una interfaccia comune a tutti gli algoritmi supportati. Context utilizza questa interfaccia per richiamare l’algoritmo definito da ConcreteStrategy
  • ConcreteStrategy → implementa gli algoritmi in base alla interfaccia Strategy
  • Context → è configurato con un oggetto di tipo ConcreteStrategy, mantiene un riferimento con l’oggetto Strategy, può definire una interfaccia che permette a Strategy di accedere ai propri dati

Conseguenze:

Il pattern Strategy ha queste conseguenze:

  • Vengono create famiglie di algoritmi
  • Rappresenta una alternativa all’utilizzo di sottoclassi, in fatti l’ereditarietà rappresenta un modo diverso di gestire vari algoritmi
  • Le strategie eliminato le istruzioni condizionali
  • Viene fornita una scelta dal punto di vista implementativo, infatti ci possono essere diverse implementazioni per o stesso comportamento
  • I Clients sono consapevoli delle diverse strategie adottabili
  • Esiste un sovraccarico di comunicazione tra strategia a contesto
  • Cresce sensibilmente il numero di oggetti.

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Iscriviti

Get every new post delivered to your Inbox.