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
Bridge

Intento
Disaccopia una astrazione dalla sua implementazione affiché le due possono variare indipendentemente.

Descrizione
Divide un componente complesso in due gerarchie collegate ma separate: l'astrazione funzionale e la rappresentazione interna.
Il Bridge Pattern è utile quando ci sono gerarchie di astrazioni e corrispondenti gerarchie di implementazioni.

Piuttosto che combinare le astrazioni e le implementazioni in molte classi distinte, il Bridge pattern implementa le astrazioni e le implementazioni sono classi indipendenti che possono essere combinate dinamicamente.



Per esempio: la specifica di servlet o JDBC e molte altre tecnologie Java, definiscono un set di interfacce la cui implementazione è delegata alla specifica implementazione.


Benefici

  • Permette di separare le interfacce dalle implementazioni
  • Favorisce l'estensibilità
  • Nasconde i dettagli implementativi al client

Quando usarlo
  • Si vuole avitare un legame permanente tra l'astrazione e la sua implementazione.
  • L'astrazione e le sue implementazioni devono essere estensibili attraverso le sottoclassi.
  • I cambiamenti nell'implementazione di una astrazione non devono avere impatto sui client; non devi cioè ricompilare il codice.

Esempio:





public class Client {

   public static void main(String args[]) {

      WindowImpl xImpl = new XWindowImpl();
      WindowImpl pmImpl = new PMWindowImpl();

      IconWindow iconWindow = new IconWindow(xImpl);
      iconWindow.drawIconWindow();
      TransientWindow transientWindow = new TransientWindow(xImpl);
      transientWindow.drawTransientWindow();

      iconWindow = new IconWindow(pmImpl);
      iconWindow.drawIconWindow();
      transientWindow = new TransientWindow(pmImpl);
      transientWindow.drawTransientWindow();

   }
}



/**
 * @stereotype Implementor
 */
public interface WindowImpl {

   public void drawRectangle();

   public void drawText();
}




/**
 * @stereotype Abstraction
 */
public class Window {

   private WindowImpl implementation;

   public Window(WindowImpl val) { implementation = val; }

   public void drawRectangle() { implementation.drawRectangle()}

   public void drawText() { implementation.drawText()}
}




/**
 * @stereotype Refined Abstraction
 */
public class IconWindow extends Window {

   public IconWindow(WindowImpl implementation) { super(implementation)}

   public void drawIconWindow() {
      drawRectangle();
      drawText();
   }
}




/**
 * @stereotype Refined Abstraction
 */
public class TransientWindow extends Window {

   public TransientWindow(WindowImpl implementation) { 
      super(implementation)
   }

   public void drawTransientWindow() {
      drawRectangle();
   }
}




/**
 * @stereotype Concrete Implementor
 */
public class PMWindowImpl implements WindowImpl {

   public void drawRectangle() {
      System.out.println("Drawing PMWindow rectangle.");
   }

   public void drawText() {
      System.out.println("Drawing PMWindow text.");
   }
}

----

Bridge 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.