Bridge定義 :
將抽象和行為劃分開來
為什麼使用?
通常
例如
如何實現?
以上面提到的咖啡 為例
先看看抽象部分的接口代碼:
public abstract class Coffee
{
CoffeeImp coffeeImp;
public void setCoffeeImp() {
this
}
public CoffeeImp getCoffeeImp() {return this
public abstract void pourCoffee();
}
其中CoffeeImp 是加不加奶的行為接口
public abstract class CoffeeImp
{
public abstract void pourCoffeeImp();
}
現在我們有了兩個抽象類
//中杯
public class MediumCoffee extends Coffee
{
public MediumCoffee() {setCoffeeImp();}
public void pourCoffee()
{
CoffeeImp coffeeImp = this
//我們以重復次數來說明是沖中杯還是大杯
for (int i =
{
coffeeImp
}
}
}
//大杯
public class SuperSizeCoffee extends Coffee
{
public SuperSizeCoffee() {setCoffeeImp();}
public void pourCoffee()
{
CoffeeImp coffeeImp = this
//我們以重復次數來說明是沖中杯還是大杯
for (int i =
{
coffeeImp
}
}
}
上面分別是中杯和大杯的具體實現
//加奶
public class MilkCoffeeImp extends CoffeeImp
{
MilkCoffeeImp() {}
public void pourCoffeeImp()
{
System
}
}
//不加奶
public class FragrantCoffeeImp extends CoffeeImp
{
FragrantCoffeeImp() {}
public void pourCoffeeImp()
{
System
}
}
Bridge模式的基本框架我們已經搭好了
看看是如何動態結合的
public class CoffeeImpSingleton
{
private static CoffeeImp coffeeImp;
public CoffeeImpSingleton(CoffeeImp coffeeImpIn)
{ffeeImp = coffeeImpIn;}
public static CoffeeImp getTheCoffeeImp()
{
return coffeeImp;
}
}
看看中杯加奶 和大杯加奶 是怎麼出來的:
//拿出牛奶
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new MilkCoffeeImp());
//中杯加奶
MediumCoffee mediumCoffee = new MediumCoffee();
mediumCoffee
//大杯加奶
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee();
superSizeCoffee
注意: Bridge模式的執行類如CoffeeImp和Coffee是一對一的關系
Bridge模式在EJB中的應用
EJB中有一個Data Access Object (DAO)模式
實現一些抽象的商業操作:如尋找一個用戶下所有的訂單
涉及數據庫操作都使用DAOImplementor
一些抽象的對數據庫資源操作
具體的數據庫操作
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27565.html