亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java設計模式之橋模式(Bridge模式)介紹

2019-11-26 15:16:37
字體:
來源:轉載
供稿:網友

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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久成人综合视频| 中文字幕一精品亚洲无线一区| 青青草国产精品一区二区| 97在线观看视频国产| 日韩欧美在线中文字幕| 97视频人免费观看| 欧美成人中文字幕| 欧美激情视频网站| 国产主播在线一区| 亚洲精品免费一区二区三区| 亚洲一区二区三区成人在线视频精品| 日韩成人激情视频| 日韩av电影手机在线观看| 日韩在线www| 欧美日韩国产精品一区二区不卡中文| 久久久久在线观看| 色婷婷久久av| 日韩欧美在线观看| 2019中文字幕在线免费观看| 中文字幕亚洲欧美在线| 国产精品久久久久久久久久尿| 97热在线精品视频在线观看| 国产91色在线播放| 日韩综合中文字幕| 精品日韩美女的视频高清| 国产精品福利小视频| 国产欧美一区二区三区久久| 精品亚洲一区二区三区在线观看| 欧洲成人午夜免费大片| 国内成人精品视频| 美女黄色丝袜一区| 久久久91精品国产一区不卡| 亚洲天堂第二页| 51视频国产精品一区二区| 成人a免费视频| 久久99视频精品| 亚洲影院污污.| 91精品国产91久久久久久久久| 国产综合香蕉五月婷在线| 亚洲黄色av网站| 成人免费午夜电影| 欧美黑人xxxⅹ高潮交| 国产午夜一区二区| 国产欧美一区二区三区在线| 国产精品视频一区二区高潮| 欧美亚洲在线播放| 欧美日韩一区二区免费在线观看| 色噜噜狠狠狠综合曰曰曰| 蜜臀久久99精品久久久久久宅男| 欧美亚洲第一区| 亚洲精品第一页| 国产在线a不卡| 91夜夜揉人人捏人人添红杏| 成人精品视频99在线观看免费| 亚洲成人av资源网| 伊人伊成久久人综合网小说| 亚洲精品色婷婷福利天堂| 在线播放亚洲激情| 欧美专区日韩视频| 91中文在线视频| 国产91久久婷婷一区二区| 成人在线精品视频| 97视频免费在线看| 自拍亚洲一区欧美另类| 国产精品第一页在线| 亚洲xxxx18| 亚洲午夜性刺激影院| 久久久久久国产精品| 久久久久久久影视| 国产视频综合在线| 欧美激情在线有限公司| 国产精品尤物福利片在线观看| 亚洲精品电影在线| 久久影院资源站| 成人精品网站在线观看| 欧美巨猛xxxx猛交黑人97人| 亚洲香蕉在线观看| 一区二区欧美日韩视频| 亚洲乱码一区二区| 日韩av在线高清| 国产一区二区三区高清在线观看| 欧美重口另类videos人妖| 色婷婷综合久久久久| 欧美一级电影免费在线观看| 精品久久久免费| 精品日韩视频在线观看| 亚洲欧美中文在线视频| 国产精品免费看久久久香蕉| 欧美激情精品久久久久久蜜臀| 亚洲欧美成人精品| 久久久久久国产精品三级玉女聊斋| 久久久久久91香蕉国产| 久久躁狠狠躁夜夜爽| 久久精品国产精品| 三级精品视频久久久久| www.亚洲免费视频| 久久青草福利网站| 精品偷拍各种wc美女嘘嘘| 在线观看亚洲区| 最近中文字幕mv在线一区二区三区四区| 最好看的2019年中文视频| 不卡伊人av在线播放| 91精品国产九九九久久久亚洲| 久久躁日日躁aaaaxxxx| 91免费在线视频| 国产精品欧美风情| 欧美日韩一二三四五区| 久久久99久久精品女同性| 91精品国产成人| 日韩精品极品在线观看播放免费视频| 欧美一级成年大片在线观看| 九九热这里只有精品6| 欧美性生交xxxxx久久久| 久久久爽爽爽美女图片| 亚洲欧美日韩一区二区在线| 欧美视频在线观看 亚洲欧| 午夜精品美女自拍福到在线| 操91在线视频| 欧美限制级电影在线观看| 久久视频在线播放| 亚洲天堂一区二区三区| 国产精品扒开腿做爽爽爽男男| 欧美日韩国产精品一区二区不卡中文| 全亚洲最色的网站在线观看| 亚洲色图综合久久| 亚洲一区二区久久| 国产精品男女猛烈高潮激情| 国产精品日韩精品| 国产精品久久久久不卡| 欧美第一黄网免费网站| 精品国产户外野外| 久久久国产一区二区三区| 欧美日韩国产一中文字不卡| 国产日韩在线亚洲字幕中文| 欧美精品激情在线观看| 欧美日韩免费看| 国产精品va在线播放我和闺蜜| 久久好看免费视频| 91久久在线视频| 国产精品欧美久久久| 国产精品免费福利| 色播久久人人爽人人爽人人片视av| 欧美成aaa人片在线观看蜜臀| 国产精品久久激情| 欧美性极品xxxx娇小| 国产日韩精品在线播放| 91亚洲精品久久久| 性色av一区二区三区在线观看| 亚洲精品久久久久久久久久久| 亚洲国内精品视频| 精品日韩中文字幕| 亚洲一区二区福利| 亚洲国产精品yw在线观看| 粉嫩av一区二区三区免费野| 欧美在线免费视频| 成人写真视频福利网| 国产精品最新在线观看| 国产精品久久久久久久久久尿| 91九色综合久久| 欧美精品电影在线| 欧美日韩国产一中文字不卡| 亚洲自拍偷拍一区| 日韩视频免费在线观看| 久久精品国产99国产精品澳门|