橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立變化,從而降低它們之間的耦合。橋接模式通過將抽象部分和實(shí)現(xiàn)部分分離,使得它們可以獨(dú)立地變化,同時(shí)在它們之間建立一個(gè)橋梁。在本文中,我們將介紹 Java 中橋接模式的定義、結(jié)構(gòu)、使用場景以及如何在實(shí)際開發(fā)中應(yīng)用。
1. 定義
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它通過將抽象部分和實(shí)現(xiàn)部分分離,使得它們可以獨(dú)立地變化。橋接模式的核心思想是通過聚合而不是繼承來連接不同的抽象和實(shí)現(xiàn)。
橋接模式通常包含四個(gè)主要角色:抽象類(Abstraction)、擴(kuò)展抽象類(RefinedAbstraction)、實(shí)現(xiàn)接口(Implementor)和具體實(shí)現(xiàn)類(ConcreteImplementor)。
- 抽象類(Abstraction): 定義抽象部分的接口,并包含一個(gè)指向?qū)崿F(xiàn)接口的引用
- 擴(kuò)展抽象類(RefinedAbstraction): 對(duì)抽象類的擴(kuò)展,通常用于添加額外的功能或修改抽象部分的行為
- 實(shí)現(xiàn)接口(Implementor): 定義實(shí)現(xiàn)部分的接口,提供基本的操作
- 具體實(shí)現(xiàn)類(ConcreteImplementor): 實(shí)現(xiàn)實(shí)現(xiàn)接口,提供具體的操作
2. 應(yīng)用場景
橋接模式通常在以下場景中使用:
-
抽象和實(shí)現(xiàn)部分的變化獨(dú)立:
當(dāng)抽象和實(shí)現(xiàn)部分的變化獨(dú)立時(shí),可以使用橋接模式。這樣可以使得兩者可以獨(dú)立地?cái)U(kuò)展,而不會(huì)相互影響
-
一個(gè)類存在多個(gè)獨(dú)立變化的維度:
當(dāng)一個(gè)類存在多個(gè)獨(dú)立變化的維度時(shí),可以使用橋接模式。例如,一個(gè)形狀類可能在顏色和形狀兩個(gè)維度上都有變化
-
不希望使用繼承:
當(dāng)不希望使用繼承來實(shí)現(xiàn)抽象和實(shí)現(xiàn)之間的連接時(shí),可以使用橋接模式。橋接模式通過聚合而不是繼承來連接抽象和實(shí)現(xiàn),降低了耦合度
3. 代碼實(shí)現(xiàn)
下面通過一個(gè)簡單的例子來演示橋接模式的實(shí)現(xiàn)。假設(shè)有一個(gè)形狀(Shape
)類和一個(gè)顏色(Color
)接口,需要在這兩者之間建立橋梁。
實(shí)現(xiàn)接口 - 顏色 Color
package com.cheney.demo;
interface Color {
String applyColor();
}
具體實(shí)現(xiàn)類 - 紅色 Red
package com.cheney.demo;
class Red implements Color {
@Override
public String applyColor() {
return "紅色";
}
}
具體實(shí)現(xiàn)類 - 綠色 Green
package com.cheney.demo;
class Green implements Color {
@Override
public String applyColor() {
return "綠色";
}
}
抽象類 - 形狀 Shape
package com.cheney.demo;
abstract class Shape {
protected Color color;
public Shape(Color color) {
this.color = color;
}
abstract String draw();
}
擴(kuò)展抽象類 - 圓形 Circle
package com.cheney.demo;
class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
String draw() {
return "畫一個(gè)圓,使用顏色是:" + color.applyColor();
}
}
擴(kuò)展抽象類 - 方形 Square
package com.cheney.demo;
class Square extends Shape {
public Square(Color color) {
super(color);
}
@Override
String draw() {
return "畫一個(gè)方形,使用顏色是:" + color.applyColor();
}
}
客戶端啟動(dòng)類 Main
package com.cheney.demo;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建顏色實(shí)現(xiàn)類
Color red = new Red();
Color green = new Green();
// 創(chuàng)建形狀并指定顏色
Shape redCircle = new Circle(red);
Shape greenSquare = new Square(green);
// 繪制形狀
System.out.println(redCircle.draw());
System.out.println(greenSquare.draw());
}
}
執(zhí)行結(jié)果:
在上述例子中,Color
是實(shí)現(xiàn)接口,定義了應(yīng)用顏色的操作。Red
和 Green
是具體實(shí)現(xiàn)類,分別表示紅色和綠色。
Shape
是抽象類,包含一個(gè)指向顏色實(shí)現(xiàn)接口的引用,并定義了繪制形狀的抽象方法。Circle
和 Square
是擴(kuò)展抽象類,分別表示圓形和方形,通過構(gòu)造方法指定顏色。
在客戶端中,我們創(chuàng)建了紅色和綠色的實(shí)現(xiàn)類,并使用它們來創(chuàng)建圓形和方形。通過橋接模式,我們將形狀和顏色分離,使得它們可以獨(dú)立變化。這樣,我們可以輕松地添加新的顏色或形狀而不影響原有的類結(jié)構(gòu)。
結(jié)語
橋接模式是一種強(qiáng)大的設(shè)計(jì)模式,通過將抽象和實(shí)現(xiàn)分離,使得它們可以獨(dú)立變化。在實(shí)際開發(fā)中,橋接模式常被用于處理多維度變化的場景,例如在圖形界面中處理不同外觀和主題的變化。通過合理使用橋接模式,可以使系統(tǒng)更加靈活、可擴(kuò)展,并且更容易維護(hù)。
【Java 設(shè)計(jì)模式】系列 《23 種設(shè)計(jì)模式》 與 《7 大設(shè)計(jì)原則》 總綱
??設(shè)計(jì)原則
?單一職責(zé)原則(SRP) 規(guī)定一個(gè)類應(yīng)該只有一個(gè)引起變化的原因
?開放/封閉原則(OCP) 表明軟件實(shí)體應(yīng)該是可以擴(kuò)展的,但是不可修改的
?里氏替換原則(LSP) 強(qiáng)調(diào)派生類必須能夠替代其基類而不引起程序錯(cuò)誤
?依賴倒置原則(DIP) 倡導(dǎo)高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象
?接口隔離原則(ISP) 提倡一個(gè)類不應(yīng)該被強(qiáng)迫依賴它不使用的接口
?合成/聚合復(fù)用原則(CARP) 建議盡量使用合成/聚合,盡量不要使用繼承
?迪米特法則(LoD) 規(guī)定一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解
??創(chuàng)建型設(shè)計(jì)模式
?單例模式 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局點(diǎn)
?工廠方法模式 定義一個(gè)用于創(chuàng)建對(duì)象的接口,但是由子類決定實(shí)例化哪一個(gè)類
?抽象工廠模式 提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類
?建造者模式 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
?原型模式 通過復(fù)制現(xiàn)有的對(duì)象來創(chuàng)建新對(duì)象,而不是從頭開始創(chuàng)建
??結(jié)構(gòu)型設(shè)計(jì)模式
?適配器模式 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口
?橋接模式 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化
?組合模式 將對(duì)象以樹形結(jié)構(gòu)組合以表示“部分-整體”的層次結(jié)構(gòu)
?裝飾器模式 動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)
?外觀模式 為子系統(tǒng)中的一組接口提供一個(gè)一致的界面
?代理模式 為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問
?享元模式 用共享的方式高效地支持大量小粒度對(duì)象文章來源:http://www.zghlxwxcb.cn/news/detail-804818.html
??行為型設(shè)計(jì)模式
?觀察者模式 定義對(duì)象間的一對(duì)多依賴,當(dāng)一個(gè)對(duì)象改變狀態(tài),所有依賴者都會(huì)受到通知并自動(dòng)更新
?策略模式 定義一系列算法,將它們封裝起來,并且使它們可以相互替換
?命令模式 將請(qǐng)求封裝成對(duì)象,使得可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化
?狀態(tài)模式 允許對(duì)象在其內(nèi)部狀態(tài)改變時(shí)改變它的行為
?責(zé)任鏈模式 為解除請(qǐng)求的發(fā)送者和接收者之間的耦合,而使多個(gè)對(duì)象都有機(jī)會(huì)處理這個(gè)請(qǐng)求
?訪問者模式 將算法與對(duì)象結(jié)構(gòu)分離,并且可以在不改變對(duì)象結(jié)構(gòu)的前提下定義新的操作
?中介者模式 用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互
?備忘錄模式 在不破壞封裝的情況下,捕獲對(duì)象的內(nèi)部狀態(tài),并在對(duì)象之外保存這個(gè)狀態(tài)
?迭代器模式 提供一種方法順序訪問一個(gè)聚合對(duì)象中的各個(gè)元素,而不暴露其內(nèi)部表示
?模版方法模式 定義一個(gè)操作中的算法的骨架,將一些步驟延遲到子類中
?解釋器模式 定義一個(gè)語言的文法,并且建立一個(gè)解釋器來解釋該語言中的句子
文章來源地址http://www.zghlxwxcb.cn/news/detail-804818.html
到了這里,關(guān)于【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之橋接模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!