Java User Group Torino

English spoken people, click here
AltriJug
Articoli
Blog
Bookmarks
ChiSiamo
Cinema
Eventi
FAQ
IscriversiAlJug
FunnyJug
HobbiesAndSports
ImparareNuoveCose
JavaJobs
JavaTraining
Libri
MailingList
Meeting
News
ProgettiAttivita
Shop
Software
StoriaDelJug
SunItalia

RSS Feed
RSS Meetings Feed


I have joined Anti-IF Campaign


Spread Firefox Affiliate Button




Logo Csp

Logo Louis Urban



CoordinamentoJug
PagineDiServizio
Manutenzione
Adapter

Intento
Convertire l'interfaccia di una classe in un'altra interfaccia che il client supporta.
L'uso di un adapter permette alle classi di lavorare insieme quando le loro interfacce non sono compatibili.

Also Known As
Wrapper

Descrizione
L'Adapter pattern agisce come intermediario tra due classi, convertendo l'interfaccia di una di esse per poter essere usata dall'altra.
Ciò rende possibile a due classi con interfaccia incompatibile di lavorare insieme.

Un oggetto adattatore usa l'ereditarietà multipla per adattare una interfaccia ad un'altra:



Un oggetto adattatore si affida alla composizione di oggetti:




Benefici

  • Permette a due (o più) oggetti incompatibili di comunicare e interagire.
  • Migliora la riutilizzabilità di vecchie funzionalità
Quando utilizzarlo
  • Si vogliono utilizzare oggetti esistenti, ma le loro interfacce non sono compatibili con quelle che servono al resto del sistema.
  • Si vogliono creare oggetti riutilizzabili che collaborino tra loro, ma senza che essi abbiano interfacce relazionate tra loro oppure le loro interfacce non sono al momento prevedibili.
  • Si vuole utilizzare un oggetto in un ambiente che si aspetta una interfaccia che è differente dall'interfaccia di tale oggetto.
  • Si vogliono creare "traduzioni" di interfacce tra sorgenti differenti.

Esempio:



import java.util.ArrayList;
import java.util.Iterator;

public class Client {

   public static void main(String[] args) {

      ArrayList list = new ArrayList();

      list.add(new Line());
      list.add(new Circle());
      list.add(new Text());

      Iterator it = list.iterator();
      while(it.hasNext()) ((Shape)it.next()).render();

   }

   /** @link aggregation */
   /*#Shape lnkShape;*/
}



/**
 * @stereotype Abstract Target
 */
public interface Shape {

   public void render();

}



/**
 * @stereotype Concrete Target
 */
public class Circle implements Shape {

   public void render() { 
      System.out.println("This is an in-house circle")
   }
}



/**
 * @stereotype Concrete Target
 */
public class Line implements Shape {

   public void render() { 
      System.out.println("This is an in-house line")
   }
}



/**
 * @stereotype Adapter
 */
public class Text implements Shape {

   ThirdPartyText text = new ThirdPartyText();

   public void render() { text.renderText()}

}



/**
 * @stereotype Adaptee
 */
public class ThirdPartyText {

   public void renderText() {
      System.out.println("This is a third party text");
   }
}

----

Adapter is mentioned on: StructuralPatterns

VQWiki includes notification systems; however, you have not yet become a member.



VeryQuickWiki Version 2.7.1 | Admin

Powered by:
Logo Csp Logo Louis Urban

Content of this site is Copyright (C) 2003 JUG Torino and its members. Java and all Java based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. Other trademarks are registered by respective owners.