轉載請註明出處:http://blog.csdn.net/lhy_ycu/article/details/40008711
橋接模式(Bridge): 把事物和其具體實現分開(抽象化與實現化解耦),使他們可以各自獨立的變化。假設你的電腦是雙系統(WinXP、Win7),而且都安裝了mysql、oracle、sqlserver、DB2這4種數據庫,那麼你有2*4種選擇去連接數據庫。按平常的寫法,咱要寫2*4個類,但是使用了橋接模式,你只需寫2+4個類,可以看出橋接模式其實就是一種將N*M轉化成N+M組合的思想。
一、uml建模:
二、代碼實現
/**
* 橋接模式(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();
}
}
/**
* 客戶端測試類
*
* @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());
}
}
三、總結
橋接的核心思想是:將抽象化與實現化解耦,使得二者可以獨立變化。