什么是橋接模式
橋接模式是一種結(jié)構(gòu)型設(shè)計模式,也被稱為“Handle/Body”。這種設(shè)計模式主要用于將抽象部分與它的實現(xiàn)部分分離,使它們可以獨立地變化。這種方式有助于減少系統(tǒng)中的耦合性,增加了擴展性。
主要解決什么問題
橋接模式主要解決的是類的維度擴展問題。在一個多維度變化的類中,使用繼承方式會導(dǎo)致類的數(shù)量急劇增加,而且增加新的維度也相對困難。而橋接模式能夠?qū)㈩惖母鱾€維度進行分離,獨立擴展,降低類之間的耦合度。
在什么時候我們需要使用橋接模式
當你想要避免永久性地綁定某個抽象類與其實現(xiàn)時。
當類的抽象和實現(xiàn)都應(yīng)該可以通過生成子類來擴展時。
當一個類的變化應(yīng)該不依賴于它的實現(xiàn)變化,兩者可以獨立變化時。
生活中的應(yīng)用實例
想象一下,你正在設(shè)計一個跨平臺的視頻播放器,支持Windows、Linux、Mac等多個操作系統(tǒng),同時需要支持多種不同的視頻格式,如MP4、AVI、MOV等。
如果使用繼承來設(shè)計,那么需要為每個操作系統(tǒng)和視頻格式的組合創(chuàng)建一個子類(例如:WindowsMP4Player、LinuxAVIPlayer等)。隨著支持的操作系統(tǒng)和視頻格式的增加,子類的數(shù)量會急劇增加。
如果采用橋接模式,可以將操作系統(tǒng)(抽象化)和視頻格式(實現(xiàn)化)分離開來,分別擴展。這樣只需要創(chuàng)建對應(yīng)操作系統(tǒng)和視頻格式的類,通過組合就可以得到我們想要的功能,大大減少了類的數(shù)量。
優(yōu)點
分離抽象接口及其實現(xiàn)部分。
提高了系統(tǒng)的可擴展性,在兩個方向上都可以獨立擴展。
實現(xiàn)細節(jié)對客戶透明,可以對用戶隱藏實現(xiàn)細節(jié)。
缺點
增加了系統(tǒng)的理解和設(shè)計難度,需要理解如何分離抽象和實現(xiàn)。
需要正確識別出系統(tǒng)中兩個獨立變化的維度。
使用場景
當一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展時。
當你希望在不影響客戶端代碼的情況下隱藏抽象的實現(xiàn)細節(jié)時。
代碼示例
// 抽象化角色:顏色
interface Color {
void bepaint(String shape);
}
// 實現(xiàn)化角色:紅色
class RedColor implements Color {
public void bepaint(String shape){
System.out.println("紅色的" + shape);
}
}
// 實現(xiàn)化角色:藍色
class BlueColor implements Color {
public void bepaint(String shape){
System.out.println("藍色的" + shape);
}
}
// 抽象化角色:形狀
abstract class Shape {
protected Color color;
public Shape(Color color) {
this.color = color;
}
public abstract void draw();
}
// 擴充抽象化角色:圓形
class Circle extends Shape {
public Circle(Color color) {
super(color);
}
public void draw() {
color.bepaint("圓形");
}
}
// 擴充抽象化角色:正方形
class Square extends Shape {
public Square(Color color) {
super(color);
}
public void draw() {
color.bepaint("正方形");
}
}
public class Client {
public static void main(String[] args) {
Color red = new RedColor();
Shape square = new Square(red);
square.draw();
Color blue = new BlueColor();
Shape circle = new Circle(blue);
circle.draw();
}
}
在這個示例中,Color 是實現(xiàn)化角色,RedColor 和 BlueColor 是具體實現(xiàn)化角色;Shape 是抽象化角色,Square 和 Circle 是擴充抽象化角色。Shape 中包含了一個 Color 的引用,形成了橋接。文章來源:http://www.zghlxwxcb.cn/news/detail-612101.html
當我們運行 main 方法,就可以看到輸出 “紅色的正方形” 和 “藍色的圓形”。文章來源地址http://www.zghlxwxcb.cn/news/detail-612101.html
到了這里,關(guān)于Java設(shè)計模式之 -- 橋接模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!