[BIGNAMI] Design Patterns in Java – Parte 2

§INTERFACE PATTERNS§ – ADAPTER Pattern

Un oggetto è un client se ha necessità di chiamare il tuo codice.
Lo scopo del pattern ADAPTER è quello di esporre al cliente una interfaccia a lui nota per sfruttare servizi di classi con differenti interfacce.

Il pattern ADAPTER consente di utilizzare una classe esistente per soddisfare le esigenze di un client.

Se il client specifica i requisiti in un’interfaccia, si sfrutta tale interfaccia per la classe adapter: l’adapter implementerà l’interfaccia nota al client e allo stesso tempo estenderà la classe che contiene i metodi richiesti, ma con diversa signature. Questo approccio crea un class adapter che traduce le chiamate del client in chiamate ai metodi della classe esistente.

Quando il client non specifica l’interfaccia, si può applicare il pattern creando una sottoclasse del client che usa una istanza della classe esistente.
Questo approccio crea un object adapter che inoltra le chiamate a un’istanza della classe client esistente. Questo
approccio può essere pericoloso, soprattutto se non si fa override di tutti i metodi che il cliente potrebbe chiamare.

Esempio

Adapting to an Interface
Una classe client fa chiamate al metodo requiredMethod() che è dichiarato in una interfaccia. In una classe esistente si ha già implementato il metodo usefulMethod(),
che soddisfa le esigenze del client. Si può creare una adapter class creando una nuova classe, NewClass(), che estenda la classe esistente (ExistingClass) e implementi l’interfaccia che il client si aspetta
(RequiredInterface).

class adapter

class adapter

Class and Object Adapters
Quando il client non dichiara i metodi *da adattare* in una interfaccia, si può sfruttare un object adapter: un adapter che usa la delegazione al posto dell’ereditarietà.

object adapter

object adapter

NewClass è un esempio di object adapter.
Un’istanza di questa classe è un’istanza della classe RequiredClass. In altre parole,
la classe NewClass soddisfa le esigenze del cliente. La classe NewClass è in grado di adattarsi alla classe ExistingClass per soddisfare le esigenze del cliente, utilizzando un’istanza di ExistingClass.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...