JaiswalTraining

Get the online training



Corejava Servlet Jsp  Php  Hibernate  Ajax Web Service   Ejb2.1 Ejb3.0 Struts Struts2  JPA Spring Ibatis   JSF    JSF2.0  CoreJavaDesignPattern    Jquery  Flex J2EE-Design-Patterns  Jboss7  Maven  Contact Me                                                                                                                                                                        
            IGNOU SMU PTU Project                                           Training                                                                                                                              
              

Contact Us  0091- 9210721663         jaiswaltraining@gmail.com




Corejava
Servlet
Jsp
Php
Hibernate
Ajax
Web Service
Ejb2.1
Ejb3.0
Struts  
Struts2
JPA
Spring
Ibatis
JSF
JSF2.0
CoreJavaDesignPattern
Jquery
Flex
J2EE-Design-Patterns
Jboss7
Maven







Bridge Pattern
  • The bridge pattern is a design pattern used in software engineering which is meant to "decouple an abstraction from itsimplementation so that the two can vary independently" [1]. The bridge uses encapsulation , aggregation, and can use inheritance to separate responsibilities into different classes.
  • When a class varies often, the features of object-oriented programming become very useful
    because changes to a program's codecan be made easily with minimal prior knowledge about the program. The bridge pattern is useful when both the class as well as what it does varies. The class itself can be thought of as the implementation and what the
Purpose
  • Decouple an abstraction from its implementation so that the two can vary independently.
Application

  • You want to avoid a permanent binding between an abstraction and its implementation. This might be the case, for example, when the implementation must be selected or switched at run-time.
  • Both the abstractions and their implementations should be extensible by subclassing. In this case, the Bridge pattern lets you combine the different abstractions and implementations and extend them independently. 
  • Changes in the implementation of an abstraction should have no impact on clients; that is, their code should not have to be recompiled. 
  • You want to share an implementation among multiple objects (perhaps using reference counting), and this fact should be hidden from the client
Examples of Visitor

  • The Bridge pattern decouples an abstraction from its implementation, so
    that the two can vary independently.
  • A household switch controlling lights, ceiling fans, etc. is an example of the Bridge. 
  • The purpose of the switch is to turn a device on or off.
  • The actual switch can be implemented as a pull chain, simple two position switch, or a variety of dimmer switches.
Example:-

MessageLogger.java
package com.model;
public interface MessageLogger {
  public void logMsg(String msg);
}

ConsoleLogger.java
package com.model;

public class ConsoleLogger implements MessageLogger {

  public void logMsg(String msg) {
    System.out.println(msg);
  }
}

Message.java
package com.model;
public interface Message {
  public void log(String msg);
}

EncryptedMessage.java
package com.model;
public  class EncryptedMessage implements Message {

  private MessageLogger logger;

  public EncryptedMessage(MessageLogger l) {
    logger = l;
  }

  public void log(String msg) {
    String str = preProcess(msg);
    logger.logMsg(str);

  }

  private String preProcess(String msg) {
    msg = msg.substring(msg.length() 1)
        + msg.substring(0, msg.length() 1);

    return msg;
  };
}

FileLogger.java
package com.model;

public  class FileLogger implements MessageLogger {

  public void logMsg(String msg) {
    FileUtil futil = new FileUtil();
    futil.writeToFile("log.txt", msg, true, true);
  }
}

FileUtil.java
package com.model;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

public class FileUtil {

  DataOutputStream dos;

  /*
   * Utility method to write a given text to a file
   */
  public boolean writeToFile(String fileName, String dataLine,
      boolean isAppendMode, boolean isNewLine) {
    if (isNewLine) {
      dataLine = "\n" + dataLine;
    }

    try {
      File   outFile = new File(fileName);
      if (isAppendMode) {
        dos = new DataOutputStream(new
 
FileOutputStream(fileName, true));
      else {
        dos = new DataOutputStream(new
FileOutputStream(outFile));
      }

      dos.writeBytes(dataLine);
      dos.close();
    catch (FileNotFoundException  ex) {
      return (false);
    catch (IOException ex) {
      return (false);
    }
    return (true);

  }

  /*
   * Reads data from a given file
   */
  public String readFromFile(String fileName) {
    String DataLine = "";
    try {
      File inFile = new File(fileName);
      BufferedReader br = new BufferedReader(
new InputStreamReader(
          new FileInputStream(inFile)));

      DataLine = br.readLine();
      br.close();
    catch (FileNotFoundException ex) {
      return (null);
    catch (IOException ex) {
      return (null);
    }
    return (DataLine);

  }

  public boolean isFileExists(String fileName) {
    File file = new File(fileName);
    return file.exists();
  }

  public boolean deleteFile(String fileName) {
    File file = new File(fileName);
    return file.delete();
  }

  /*
   * Reads data from a given file into a Vector
   */

  public Vector fileToVector(String fileName) {
    Vector v = new Vector();
    String inputLine;
    try {
      File inFile = new File(fileName);
      BufferedReader br = new BufferedReader(
new InputStreamReader(
          new FileInputStream(inFile)));

      while ((inputLine = br.readLine()) != null) {
        v.addElement(inputLine.trim());
      }
      br.close();
    // Try
    catch (FileNotFoundException ex) {
      //
    catch (IOException ex) {
      //
    }
    return (v);
  }

  /*
   * Writes data from an input vector to a given file
   */

  public void vectorToFile(Vector v, String fileName) {
    for (int i = 0; i < v.size(); i++) {
      writeToFile(fileName, (Stringv.elementAt(i),
 true, 
true);
    }
  }

  /*
   * Copies unique rows from a source file to a
 destination file

   */

  public void copyUniqueElements(String sourceFile,
String resultFile
) {
    Vector v = fileToVector(sourceFile);
    v = MiscUtil.removeDuplicates(v);
    vectorToFile(v, resultFile);
  }

// end FileUtil

MiscUtil.java
package com.model;

import java.util.Vector;

public  class MiscUtil {

  public static boolean hasDuplicates(Vector v) {
    int i = 0;
    int j = 0;
    boolean duplicates = false;

    for (i = 0; i < v.size() 1; i++) {
      for (j = (i + 1); j < v.size(); j++) {
        if (v.elementAt(i).toString().equalsIgnoreCase(
            v.elementAt(j).toString())) {
          duplicates = true;
        }

      }

    }

    return duplicates;
  }

  public static Vector removeDuplicates(Vector s) {
    int i = 0;
    int j = 0;
    boolean duplicates = false;

    Vector v = new Vector();

    for (i = 0; i < s.size(); i++) {
      duplicates = false;
      for (j = (i + 1); j < s.size(); j++) {
        if (s.elementAt(i).toString().equalsIgnoreCase(
            s.elementAt(j).toString())) {
          duplicates = true;
        }

      }
      if (duplicates == false) {
        v.addElement(s.elementAt(i).toString().trim());
      }

    }

    return v;
  }

  public static Vector removeDuplicateDomains(Vector s) {
    int i = 0;
    int j = 0;
    boolean duplicates = false;
    String str1 = "";
    String str2 = "";

    Vector v = new Vector();

    for (i = 0; i < s.size(); i++) {
      duplicates = false;
      for (j = (i + 1); j < s.size(); j++) {
        str1 = "";
        str2 = "";
        str1 = s.elementAt(i).toString().trim();
        str2 = s.elementAt(j).toString().trim();
        if (str1.indexOf('@'> -1) {
          str1 = str1.substring(str1.indexOf('@'));
        }
        if (str2.indexOf('@'> -1) {
          str2 = str2.substring(str2.indexOf('@'));
        }

        if (str1.equalsIgnoreCase(str2)) {
          duplicates = true;
        }

      }
      if (duplicates == false) {
        v.addElement(s.elementAt(i).toString().trim());
      }

    }

    return v;
  }

  public static boolean areVectorsEqual(Vector a, Vector b) {
    if (a.size() != b.size()) {
      return false;
    }

    int i = 0;
    int vectorSize = a.size();
    boolean identical = true;

    for (i = 0; i < vectorSize; i++) {
      if (!(a.elementAt(i).toString().equalsIgnoreCase(b.elementAt(i)
          .toString()))) {
        identical = false;
      }
    }

    return identical;
  }

  public static Vector removeDuplicates(Vector a, Vector b) {

    int i = 0;
    int j = 0;
    boolean present = true;
    Vector v = new Vector();

    for (i = 0; i < a.size(); i++) {
      present = false;
      for (j = 0; j < b.size(); j++) {
        if (a.elementAt(i).toString().equalsIgnoreCase(
            b.elementAt(j).toString())) {
          present = true;
        }
      }
      if (!(present)) {
        v.addElement(a.elementAt(i));
      }
    }

    return v;
  }

}// end of class

TextMessage.java
package com.model;
public class TextMessage implements Message {
  private MessageLogger logger;

  public TextMessage(MessageLogger l) {
    logger = l;
  }

  public void log(String msg) {
    String str = preProcess(msg);
    logger.logMsg(str);

  }

  private String preProcess(String msg) {
    return msg;
  };
}

Test.java
package com.test;

import com.model.EncryptedMessage;
import com.model.FileLogger;
import com.model.Message;
import com.model.MessageLogger;

public class Test {
    public static void main(String[] args) {
        //Create an appropriate implementer object
        MessageLogger logger = new FileLogger();

        //Choose required interface object and
        // configure it with the implementer object
        Message msg = new EncryptedMessage(logger);

        msg.log("Test Message");

      }

}

Download Zip code

Example:--

BaseList.java
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();
    }
}

ListImpl.java
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();
}

NumberedList.java
class NumberedList extends BaseList{
    public String get(int index){
        return (index + 1". " super.get(index);
    }
}

OrderedListImpl
import java.util.*;
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;
    }
}

OrnamentedList.java

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);
    }
}

RunBridgePattern
import java.util.ArrayList;

public class RunBridgePattern {
    public static void main(String [] arguments){


        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));
        }
    }
}







Output:-


Download Zip code

Example:-

Furniture.java
package bridge;

abstract class Furniture

  FurnitureImp furnitureImp;
  
  public FurnitureImp getInstance()
  {
    return furnitureImp;
  }
  
  public void setFurnitureImp()
  {
    this.furnitureImp = FurnitureImpSingleton.getInstance();
  }
  
  public abstract void buyFurniture();
}

FurnitureImp.java
package bridge;

abstract class FurnitureImp

  public abstract void buyFurnitureImp();
}

FurnitureImpSingleton.java
package bridge;

public class FurnitureImpSingleton
{  
  private static FurnitureImp furnitureImp;
  public FurnitureImpSingleton(FurnitureImp furImp)
  {
    furnitureImp = furImp;
  }
  public static FurnitureImp getInstance()
  {
    return furnitureImp;  
  }
}

MoreFurniture.java
package bridge;

public class MoreFurniture extends Furniture
{  
  public MoreFurniture()
  {  
    setFurnitureImp();
  
  public void buyFurniture()
  {  
    FurnitureImp furnitureImp = this.getInstance()
    furnitureImp.buyFurnitureImp()
  }
}

RefrigeratorImp.java
package bridge;

public class RefrigeratorImp extends FurnitureImp
{
  RefrigeratorImp()
  {
    
  }
  public void buyFurnitureImp()
  {
    System.out.println("bought Refrigerator...")
  }
}

TelevisionImp.java
package bridge;

public class TelevisionImp extends FurnitureImp

  TelevisionImp() 
  {
    
  }
  public void buyFurnitureImp()
  {
    System.out.println("bought Television...");  
  }
}

BridgePatternExample.java
package bridge;

public class BridgePatternExample 

  public static void main(String[] args)
  
    new FurnitureImpSingleton(new RefrigeratorImp());
    MoreFurniture moreFurniture = new MoreFurniture();
    moreFurniture.buyFurniture()
  }
}

Output:-



Download Zip code