天天看點

Java設計模式菜鳥系列(十七)橋接模式模組化與實作

橋接模式(Bridge): 把事物和其詳細實作分開(抽象化與實作化解耦),使他們能夠各自獨立的變化。如果你的電腦是雙系統(WinXP、Win7)。并且都安裝了mysql、oracle、sqlserver、DB2這4種資料庫,那麼你有2*4種選擇去連接配接資料庫。按尋常的寫法。咱要寫2*4個類。可是使用了橋接模式,你僅僅需寫2+4個類,能夠看出橋接模式事實上就是一種将N*M轉化成N+M組合的思想。

一、uml模組化:

Java設計模式菜鳥系列(十七)橋接模式模組化與實作

二、代碼實作

/**
 * 橋接模式(Bridge): 把事物和其詳細實作分開(抽象化與實作化解耦),使他們能夠各自獨立的變化。
 * 
 * 如果你的電腦是雙系統(WinXP、Win7)。并且都安裝了mysql、oracle、sqlserver、DB2這4種資料庫
 * 
 * 那麼你有2*4種選擇去連接配接資料庫。按尋常的寫法。咱要寫2*4個類,可是使用了橋接模式,你僅僅需寫2+4個類
 * 
 * 能夠看出橋接模式事實上就是一種将N*M轉化成N+M組合的思想。

 */
interface Driver {
  public void method();
}

class MysqlDriver implements Driver {

  @Override
  public void method() {
    System.out.println("use mysql driver to connection db...\n");
  }
}

class OracleDriver implements Driver {

  @Override
  public void method() {
    System.out.println("use oracle driver to connection db...\n");
  }
}

/**
 * 這裡你還能夠寫SqlserverDriver、DB2Driver...
 */

abstract class Computer {
  public abstract void connection(Driver driver);
}

class WinXP extends Computer {
  @Override
  public void connection(Driver driver) {
    System.out.println("WinXP Computer");
    driver.method();
  }
}

class Win7 extends Computer {
  @Override
  public void connection(Driver driver) {
    System.out.println("Win7 Computer");
    driver.method();
  }
}

/**
 * client測試類
 * 
 * @author Leo
 */
public class Test {
  public static void main(String[] args) {
    /**
     * 第一種組合:winXP使用mysql驅動連接配接資料庫
     */
    Computer winxp = new WinXP();
    winxp.connection(new MysqlDriver());
    /**
     * 另外一種組合:win7使用mysql驅動連接配接資料庫
     */
    Computer win7 = new Win7();
    win7.connection(new MysqlDriver());
    /**
     * 第三種組合:winXP使用oracle驅動連接配接資料庫
     */
    Computer cwinxp = new WinXP();
    cwinxp.connection(new OracleDriver());
    /**
     * 第四種組合:winXP使用oracle驅動連接配接資料庫
     */
    Computer cwin7 = new Win7();
    cwin7.connection(new OracleDriver());

  }
}      

三、總結

橋接的核心思想是:将抽象化與實作化解耦,使得二者能夠獨立變化。