結構型模式之橋接


GOF對橋接模式(Bridge)的定義是:將抽象部分和它的實現部分分離,使它們可以獨立地變化。這里需要記錄一些概念,參考自《Java與模式》一書:

抽象化:存在於多個實體中的共同的概念性聯系,例如:一組對象如果有相同的概念性聯系,則可以用一個共同的類加以描述;如果一些類有相同的概念性聯系,則可以用一個抽象類加以描述。

實現化:就是給出抽象化的具體實現,例如:一個對象是一個類的實現化;一個具體類可以是一個抽象類的實現化。

脫耦:耦合是兩個實體具有某種強關聯關系,將這種強關聯關系去掉就是解耦的過程。所謂強關聯是在編譯時期就已經確定好了關系,例如:繼承就是一種強關聯關系;而弱關聯關系則是在運行期間可以動態地改變關聯狀態,類的組合關系就是一種若關聯關系,這在Java編程中是最常用的一種關系。

 理解GOF所下定義的關鍵是搞明白“抽象” 和“實現”的含義,這里的抽象說白了就是指一個類及其子類,而“實現”是抽象類及其子類實現自己所用的對象,這句話用漢語說比較困難,請看《Design Patterns Explained》作者的表述:Implementations here means the objects that the abstract class and its derivations use to implement themselves with,這就是“實現”   的含義。比如:有一個圖形的抽象類Shape,Shape有相應的子類,比如Rectange類,要實現一個Rectange對象,當然需要Draw方法,如果將Draw方法定義到Shape類中,那么每個繼承自Shape類的子類都要自定義自己的Draw()方法,豈不是很麻煩,但是,如果將Draw()方法提煉出來單獨放到一個類中(也就是Implementor)中,然后讓Shape子類去調用對應的Draw()方法豈不是更妙,這樣添加Shape子類就不用再在自己的類中添加Draw()方法了,而是調用相應的ConcreteImplementor中的Draw()方法,下面第一個圖是Bridge模式的結構圖,第二個圖是《Design Patterns Explained》一書中所舉畫圖例子的Bridge模式設計圖

圖1. Bridge模式結構圖

圖2. Bridge模式畫圖設計圖

畫圖舉例代碼如下:

abstract class Shape{
private Drawing drawing;
public Shape(Drawing drawing){
this.drawing=drawing;
}
public void Draw(){
drawing.drawLine();
}
}
class Rectange extends Shape{
public Rectange(Drawing drawing){
super(drawing);
}
}
abstract class Drawing{
public void drawLine(){};
public void drawCircle(){};
}
class V1Drawing extends Drawing{
public void drawLine(){
System.out.println("Drawing Lines");
}
public void drawCircle(){
System.out.println("Drawing Circles");
}
}  

《Java與模式》一書還舉例一個應用的例子,就是JDBC驅動器的實現利用的是橋梁模式

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com