站長資訊網
最全最豐富的資訊網站

詳細介紹Java橋接模式

本篇文章給大家帶來了關于java的相關知識,其中主要介紹了橋接模式的相關問題,橋接模式將抽象與實現分離,使它們可以獨立變化,降低了抽象和實現這兩個可變維度的耦合度,下面一起來看一下,希望對大家有幫助。

詳細介紹Java橋接模式

推薦學習:《java視頻教程》

其實在現實生活中,有很多類可以有兩個或多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m 種形狀和 n 種顏色的圖形就有 m*n 種,不但對應的子類很多,而且擴展比較困難。

比如不同顏色和字體的文字、不同品牌和功率的汽車、不同性別和職業的男女、支持不同平臺和不同文件格式的媒體播放器等。如果用橋接模式就能很好地解決這些問題。


1、橋接模式的定義

將抽象與實現分離,使它們可以獨立變化。它是用組合關系代替繼承關系來實現,從而降低了抽象和實現這兩個可變維度的耦合度

模式類型:結構設計模式

原理類圖:
詳細介紹Java橋接模式
原理類圖說明:

  1. Client類: 橋接模式的調用者
  2. 抽象類(Abstraction) : 維護了Implementor/即它的實現類ConcretelmplementorA…二者是器合關系,Abstraction充當橋接英
  3. RehinedAbstraction: 是Abstraction抽象類的子類lmplementor:行為實現類的接口
  4. ConcretelmplementorA/B: 行為的具體實現類
  5. 從UML圖: 這里的抽象類和接口是聚合的關系,其實調用和被調用關系

2、橋接模式的優缺點

優點:

  1. 抽象與實現分離,擴展能力強
  2. 符合開閉原則
  3. 符合合成復用原則
  4. 其實現細節對客戶透明

缺點:

  • 由于聚合關系建立在抽象層,要求開發者針對抽象化進行設計與編程,能正確地識別出系統中兩個獨立變化的維度,這增加了系統的理解與設計難度

3、橋接模式的結構

橋接(Bridge)模式包含以下主要角色:

  1. 抽象化(Abstraction)角色: 定義抽象類,并包含一個對實現化對象的引用
  2. 擴展抽象化(Refined Abstraction)角色:是抽象化角色的子類,實現父類中的業務方法,并通過組合關系調用實現化角色中的業務方法
  3. 實現化(Implementor)角色:定義實現化角色的接口,供擴展抽象化角色調用
  4. 具體實現化(Concrete Implementor)角色:給出實現化角色接口的具體實現

結構圖:

詳細介紹Java橋接模式
該結構圖的實現代碼:

實視化角色:

/**  * 實視化角色  */public interface Implemntor {      public void OperationImpl();}

具體實現化角色:

/**  * 具體實現化角色  */public class ConcreteImplementorA implements Implemntor{     @Override     public void OperationImpl() {         System.out.println("具體實現化角色被訪問");     }}

抽象化角色:

/**  * 抽象化角色  */public abstract class Abstraction {      protected Implemntor implemntor;      protected Abstraction(Implemntor implemntor){         this.implemntor = implemntor;     }      public abstract void Operation();}

擴展抽象化角色:

/**  * 擴展抽象化角色  */public class RefinedAbstraction extends Abstraction{      protected RefinedAbstraction(Implemntor implemntor) {         super(implemntor);     }      public void Operation(){         System.out.println("擴展抽象化角色被訪問");         implemntor.OperationImpl();     }}

測試類:

public class Test {     public static void main(String[] args) {          Implemntor implemntor = new ConcreteImplementorA();         Abstraction abs = new RefinedAbstraction(implemntor);         abs.Operation();      }}

輸出:

擴展抽象化角色被訪問 具體實現化角色被訪問

4 、橋接模式的案例實現

將實現與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變

交通工具在路上行駛,這里有兩個維度的變化,交通工具的類型不同路也分水泥路和柏油路

類圖:
詳細介紹Java橋接模式

交通工具類:

/**  * 交通工具類  */public interface Vehicle {      public void drive();}

具體的交通工具:小汽車

/**  * 具體的交通工具:小汽車  */public class Car implements Vehicle{     @Override     public void drive() {         System.out.println("小汽車");     }}

具體的交通工具:大巴車

/**  * 具體的交通工具:大巴車  */public class Bus implements Vehicle{     @Override     public void drive() {         System.out.println("大巴車");     }}

抽象的路:

/**  * 抽象的路  */public abstract class Road {      protected Vehicle vehicle;      public Road(Vehicle vehicle){         this.vehicle = vehicle;     }      public abstract void driveOnRoad();}

具體的路:油柏路

/**  * 具體的路:油柏路  */public class UnpavedRoad extends Road{     public UnpavedRoad(Vehicle vehicle) {         super(vehicle);     }      @Override     public void driveOnRoad() {          super.vehicle.drive();         System.out.println("行駛在油柏路");     }}

具體的路:水泥路

/**  * 具體的路:水泥路  */public class CementRoad extends Road{     public CementRoad(Vehicle vehicle) {         super(vehicle);     }      @Override     public void driveOnRoad() {         super.vehicle.drive();         System.out.println("行駛在水泥路");     }}

測試類:

//測試public class Test {     public static void main(String[] args) {          Road roadCar = new CementRoad(new Car());         roadCar.driveOnRoad();          Road roadBus = new CementRoad(new Bus());         roadBus.driveOnRoad();      }}

輸出:

小汽車 行駛在水泥路 大巴車 行駛在水泥路

5、橋接模式的注意事項

  1. 實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,這有助于系統進行分層設計,從而產生更好的結構化系統
  2. 對于系統的高層部分,只需要知道抽象部分和實現部分的接口就可以了,其它的部分由具體業務來完成
  3. 橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本
  4. 橋接模式的引入增加了系統的理解和設計難度,由于聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計和編程
  5. 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用范圍有一定的局限性,即需要有這樣的應用場景

6、橋接模式應用場景

對于那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用.

推薦學習:《java視頻教程》

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久久精品人妻久久影视| 精品无码日韩一区二区三区不卡| 日韩在线观看一区二区三区| 精品久久国产字幕高潮| 中文无码精品A∨在线观看不卡| 亚洲精品在线播放视频| 人妻精品久久久久中文字幕一冢本 | 国内精品免费麻豆网站91麻豆 | 91精品啪在线观看国产电影| 午夜精品久视频在线观看| 久久这里精品国产99丫E6| 国产乱子伦精品无码码专区| 久久99国产精品成人| 日本精品高清一区二区| 久久99精品久久久久久秒播| 国产精品1024在线永久免费| 午夜一级日韩精品制服诱惑我们这边 | 精品国产三级在线观看| 亚洲国产精品自在自线观看| 国内精品乱码卡1卡2卡3免费| 国产成人精品怡红院| 午夜精品久久久久| 国产精品久久久久久久久软件| 在线视频精品免费| 国产69精品久久久久APP下载| 亚洲AV永久无码精品一福利| 久久精品日韩av无码| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲AV成人精品日韩一区18p| 国产精品高清全国免费观看| 国产精品高清在线观看93| 国产成人亚洲精品无码AV大片| 国产亚洲Av综合人人澡精品| 日韩精品无码免费视频| 无码欧精品亚洲日韩一区夜夜嗨| 日韩亚洲AV无码一区二区不卡| 日韩av无码久久精品免费| 日韩不卡在线视频| 2022年国产精品久久久久| 国产精品国语对白露脸在线播放 | 无码人妻精品一区二区三区蜜桃|