Java設計形式之橋形式(Bridge形式)引見。本站提示廣大學習愛好者:(Java設計形式之橋形式(Bridge形式)引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式之橋形式(Bridge形式)引見正文
Bridge界說:將籠統和行動劃離開來,各自自力,但能靜態的聯合。
為何應用橋形式
平日,當一個籠統類或接口有多個詳細完成(concrete subclass),這些concrete之間關系能夠有以下兩種:
1.這多個詳細完成之間正好是並列的,如後面舉例,打樁,有兩個concrete class:方形樁和圓形樁;這兩個外形上的樁是並列的,沒有概念上的反復,那末我們只需應用繼續便可以了。
2.現實運用上,經常有能夠在這多個concrete class之間有概念上堆疊。那末須要我們把籠統配合部門和行動配合部門各自自力開來,本來是預備放在一個接口裡,如今須要設計兩個接口,分離放置籠統和行動。
例如,一杯咖啡為例,有中杯和年夜杯之分,同時還有加奶 不加奶之分。假如用純真的繼續,這四個詳細完成(中杯 年夜杯 加奶 不加奶)之間有概念堆疊,由於有中杯加奶,也有中杯不加奶,假如再在中杯這一層再完成兩個繼續,很明顯凌亂,擴大性極差。那我們應用Bridge形式來完成它。
若何完成橋形式
以下面提到的咖啡 為例。我們本來盤算只設計一個接口(籠統類),應用Bridge形式後,我們須要將籠統和行動離開,加奶和不加奶屬於行動,我們將它們籠統成一個專門的行動接口。
先看看籠統部門的接口代碼:
public abstract class Coffee{
CoffeeImp coffeeImp;
public void setCoffeeImp() {
this.CoffeeImp = CoffeeImpSingleton.getTheCoffeImp();
}
public CoffeeImp getCoffeeImp() {return this.CoffeeImp;}
public abstract void pourCoffee();
}
個中CoffeeImp 是加不加奶的行動接口,看其代碼以下:
public abstract class CoffeeImp{
public abstract void pourCoffeeImp();
}
如今我們有了兩個籠統類,上面我們分離對其停止繼續,完成concrete class:
//中杯
public class MediumCoffee extends Coffee{
public MediumCoffee() {setCoffeeImp();}
public void pourCoffee(){
CoffeeImp coffeeImp = this.getCoffeeImp();
//我們以反復次數來講明是沖中杯照樣年夜杯 ,反復2次是中杯
for (int i = 0; i < 2; i++){
coffeeImp.pourCoffeeImp();
}
}
}
//年夜杯
public class SuperSizeCoffee extends Coffee{
public SuperSizeCoffee() {setCoffeeImp();}
public void pourCoffee(){
CoffeeImp coffeeImp = this.getCoffeeImp();
//我們以反復次數來講明是沖中杯照樣年夜杯 ,反復5次是年夜杯
for (int i = 0; i < 5; i++){
coffeeImp.pourCoffeeImp();
}
}
}
下面分離是中杯和年夜杯的詳細完成.上面再對行動CoffeeImp停止繼續:
//加奶
public class MilkCoffeeImp extends CoffeeImp{
MilkCoffeeImp() {}
public void pourCoffeeImp(){
System.out.println("加了厚味的牛奶");
}
}
//不加奶
public class FragrantCoffeeImp extends CoffeeImp{
FragrantCoffeeImp() {}
public void pourCoffeeImp(){
System.out.println("甚麼也沒加,幽香");
}
}
Bridge形式的根本框架我們曾經搭好了,別忘卻界說中還有一句:靜態聯合,我們如今可以喝到至多四種咖啡:
1.中杯加奶
2.中杯不加奶
3.年夜杯加奶
4.年夜杯不加奶
看看是若何靜態聯合的,在應用之前,我們做個預備任務,設計一個單態類(Singleton)用來hold以後的CoffeeImp:
public class CoffeeImpSingleton{
private static CoffeeImp coffeeImp;
public CoffeeImpSingleton(CoffeeImp coffeeImpIn)
{this.coffeeImp = coffeeImpIn;}
public static CoffeeImp getTheCoffeeImp(){
return coffeeImp;
}
}
看看中杯加奶 和年夜杯加奶 是怎樣出來的:
//拿出牛奶
CoffeeImpSingleton coffeeImpSingleton = new CoffeeImpSingleton(new MilkCoffeeImp());
//中杯加奶
MediumCoffee mediumCoffee = new MediumCoffee();
mediumCoffee.pourCoffee();
//年夜杯加奶
SuperSizeCoffee superSizeCoffee = new SuperSizeCoffee();
superSizeCoffee.pourCoffee();
留意:Bridge形式的履行類如CoffeeImp和Coffee是一對一的關系,准確創立CoffeeImp是該形式的症結。
Bridge形式在EJB中的運用
EJB中有一個Data Access Object (DAO)形式,這是將貿易邏輯和詳細數據資本離開的,由於分歧的數據庫有分歧的數據庫操作。將操作分歧數據庫的行動自力籠統成一個行動接口DAO,以下:
1.Business Object (相似Coffee)
完成一些籠統的貿易操作:如尋覓一個用戶下一切的定單。觸及數據庫操作都應用DAOImplementor。
2.Data Access Object (相似CoffeeImp)
一些籠統的對數據庫資本操作。
3.DAOImplementor 如OrderDAOCS, OrderDAOOracle, OrderDAOSybase(相似MilkCoffeeImp FragrantCoffeeImp)
詳細的數據庫操作,如"INSERT INTO "等語句,OrderDAOOracle是Oracle OrderDAOSybase是Sybase數據庫。
4.數據庫 (Cloudscape, Oracle, or Sybase database via JDBC API)