Mega Code Archive

 
Categories / Java / Design Pattern
 

Bridge Pattern in Java 3

//[C] 2002 Sun Microsystems, Inc.--- import java.util.ArrayList; public class RunBridgePattern {     public static void main(String [] arguments){         System.out.println("Example for the Bridge pattern");         System.out.println();         System.out.println("This example divides complex behavior among two");         System.out.println(" classes - the abstraction and the implementation.");         System.out.println();         System.out.println("In this case, there are two classes which can provide the");         System.out.println(" abstraction - BaseList and OrnamentedList. The BaseList");         System.out.println(" provides core funtionality, while the OrnamentedList");         System.out.println(" expands on the model by adding a list character.");         System.out.println();         System.out.println("The OrderedListImpl class provides the underlying storage");         System.out.println(" capability for the list, and can be flexibly paired with");         System.out.println(" either of the classes which provide the abstraction.");                  System.out.println("Creating the OrderedListImpl object.");         ListImpl implementation = new OrderedListImpl();                  System.out.println("Creating the BaseList object.");         BaseList listOne = new BaseList();         listOne.setImplementor(implementation);         System.out.println();                  System.out.println("Adding elements to the list.");         listOne.add("One");         listOne.add("Two");         listOne.add("Three");         listOne.add("Four");         System.out.println();                  System.out.println("Creating an OrnamentedList object.");         OrnamentedList listTwo = new OrnamentedList();         listTwo.setImplementor(implementation);         listTwo.setItemType('+');         System.out.println();                  System.out.println("Creating an NumberedList object.");         NumberedList listThree = new NumberedList();         listThree.setImplementor(implementation);         System.out.println();                  System.out.println("Printing out first list (BaseList)");         for (int i = 0; i < listOne.count(); i++){             System.out.println("\t" + listOne.get(i));         }         System.out.println();                  System.out.println("Printing out second list (OrnamentedList)");         for (int i = 0; i < listTwo.count(); i++){             System.out.println("\t" + listTwo.get(i));         }         System.out.println();                  System.out.println("Printing our third list (NumberedList)");         for (int i = 0; i < listThree.count(); i++){             System.out.println("\t" + listThree.get(i));         }     } } interface ListImpl{     public void addItem(String item);     public void addItem(String item, int position);     public void removeItem(String item);     public int getNumberOfItems();     public String getItem(int index);     public boolean supportsOrdering(); } class BaseList{     protected ListImpl implementor;          public void setImplementor(ListImpl impl){         implementor = impl;     }          public void add(String item){         implementor.addItem(item);     }     public void add(String item, int position){         if (implementor.supportsOrdering()){             implementor.addItem(item, position);         }     }          public void remove(String item){         implementor.removeItem(item);     }          public String get(int index){         return implementor.getItem(index);     }          public int count(){         return implementor.getNumberOfItems();     } } class NumberedList extends BaseList{     public String get(int index){         return (index + 1) + ". " + super.get(index);     } } class OrderedListImpl implements ListImpl{     private ArrayList items = new ArrayList();          public void addItem(String item){         if (!items.contains(item)){             items.add(item);         }     }     public void addItem(String item, int position){         if (!items.contains(item)){             items.add(position, item);         }     }          public void removeItem(String item){         if (items.contains(item)){             items.remove(items.indexOf(item));         }     }          public boolean supportsOrdering(){         return true;     }          public int getNumberOfItems(){         return items.size();     }          public String getItem(int index){         if (index < items.size()){             return (String)items.get(index);         }         return null;     } } class OrnamentedList extends BaseList{     private char itemType;          public char getItemType(){ return itemType; }     public void setItemType(char newItemType){         if (newItemType > ' '){             itemType = newItemType;         }     }          public String get(int index){         return itemType + " " + super.get(index);     } }