詳細介紹Java橋接模式
本篇文章為大家帶來了關於java的相關知識,其中主要介紹了橋接模式的相關問題,橋接模式將抽象與實現分離,使它們可以獨立變化,降低了抽象和實現這兩個可變維度的耦合度,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
其實在現實生活中,有很多類別可以有兩個或更多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m 種形狀和n 種顏色的圖形就有m*n 種,不但對應的子類很多,而且擴展比較困難。
例如不同顏色和字體的文字、不同品牌和功率的汽車、不同性別和職業的男女、支援不同平台和不同檔案格式的媒體播放器等。如果用橋接模式就能很好地解決這些問題。
1、橋接模式的定義
將抽象與實作分離,使它們可以獨立變更。它是用組合關係代替繼承關係來實現,從而降低了抽象化和實現這兩個可變維度的耦合度
模式類型:結構設計模式
原理類別圖:
原理類別圖表說明:
- #Client類別: 橋接模式的呼叫者
- 抽象類別(Abstraction) : 維護了Implementor/即它的實作類別ConcretelmplementorA…二者是器合關係,Abstraction充當橋接英
- #RehinedAbstraction: 是Abstraction抽象類別的子類別lmplementor:行為實作類別的介面
- ConcretelmplementorA/B: 行為的具體實作類別
- #從UML圖: 這裡的抽象類別和介面是聚合的關係,其實呼叫和被呼叫關係
2、橋接模式的優缺點
優點:
- 抽象與實作分離,擴展能力強
- #符合開閉原則
- #符合合成復用原則
- 其實作細節對客戶透明
缺點:
- 由於聚合關係建立在抽象層,要求開發者針對抽象化進行設計與編程,能正確辨識系統中兩個獨立變化的維度,這增加了系統的理解與設計難度
##3、橋接模式的結構橋接(Bridge)模式包含以下主要角色:
- 抽象化(Abstraction)角色: 定義抽象類,並包含一個對實作化物件的引用
- 擴展抽象化(Refined Abstraction)角色:是抽象角色的子類,實作父類別中的業務方法,並透過組合關係呼叫來實現角色中的業務方法 實現化(Implementor)角色:定義實現化角色的接口,供擴展抽象化角色調用
- 具體實現化(Concrete Implementor)角色:給出實現化角色接口的具體實現
結構圖:
#該結構圖的實作程式碼:
實視化角色:
/** * 实视化角色 */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();
}}
扩展抽象化角色被访问
具体实现化角色被访问
將實作與抽象放在兩個不同的類別層次中,使兩個層次可以獨立改變
交通工具在路上行駛,這裡有兩個維度的變化,
交通工具的類型不同,路也分水泥路和柏油路
類圖:/**
* 交通工具类
*/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();
}}
对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用. 推荐学习:《java视频教程》小汽车
行驶在水泥路
大巴车
行驶在水泥路
5、桥接模式的注意事项
6、桥接模式应用场景
以上是詳細介紹Java橋接模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。
