Java設計模式菜鳥系列(十七)橋接模式建模與實現

轉載請註明出處: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());

	}
}

三、總結

橋接的核心思想是:將抽象化與實現化解耦,使得二者可以獨立變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章