一、橋接模式概念
橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。這種模式涉及到一個作爲橋接的接口,使得實體類的功能獨立於接口實現類。這兩種類型的類可被結構化改變而互不影響。
在現實生活中,某些類具有兩個或多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m種形狀和n種顏色的圖形就有mxn種,不但對應的子類很多,而且擴展困難。
設想如果要繪製地形、圓、橢圓、正方形,我們至少需要4個形狀類,但是如果繪製的圖形需要具有不同的顫色,如紅色、綠色、藍色等,此時至少有如下兩種設計方案:
第一種設計方案是爲每一種形狀都提供一套各種顏色的版本
這兩種方法明顯比較複雜,不易擴展。
下面我們看看橋接模式
這種方式看起來就很不錯,想加一種顏色還是圖形都比較方便哈哈哈。
二、接下面我們看代碼解析
1、我們先創建一個屬於顏色的接口
public interface Color{
public void print();
}
2、我們創建各種顏色實現顏色接口
public interface Gray implements Color{
public void print(){
System.out.println("這是灰色")
}
}
public interface Red implements Color{
public void print(){
System.out.println("這是紅色")
}
}
3、顏色創建好了,我們現在創建一個圖形的抽象類,用來引用顏色類
public abstract class Shape{
private Color color;
public Color getColor(){
return color;
}
public void setColor(Color color){
this.color=color;
}
public Shape(Color color){
super();
this.color=color;
}
//打印形狀
public abstract void show();
}
4、創建一個圖形實現類
public class Circle extents Shape{
public Circle(Color color){
super(color);
}
public void show(){
System.out.println("圓形");
this.getColor().print();
}
}
5、好了,接下來我們測試一下
public class Test{
Color red=new Red();
Color gray=new Gray();
Shape circle=new Circle(red);
circle.show();
}
6、運行結果:
圓形
這是紅色
三、橋接模式的優缺點
優點
1)分離抽象接口極其實現部分。
2)橋接模式有時類似於多繼承方素,但是多繼承方案違背了類的單一職責原則(即一
個類只有一個變化的原因),複用性比較差,而且多繼承結構中類的個數非常龐大,
橋接模式是比多繼承方案重好的解決方法。
3)橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要
修改原有系統。
缺點
1)橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與編程。
2)橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍具有一定的侷限性。