在 Gof 的書中指到Bridge模式的目的:「將抽象部份與它的實(shí)現(xiàn)部份分離,使它們都可以獨(dú)立地變化?!?br>
這句話寫得簡短,這邊再作進(jìn)一步的解釋,抽象部份指的是行為方面定義,實(shí)現(xiàn)方面指的是與特定平臺相依的代碼實(shí)現(xiàn)。
一個(gè)實(shí)際的例子在Gof書中有提到,假設(shè)您定義了一個(gè)IWindow介面,這個(gè)介面只定義一些抽象的繪圖行為,而不涉及平臺的實(shí)作,今天您可以繼承這個(gè)類來開發(fā)適用於X Window的XWindow類,也可以繼承這個(gè)類來開發(fā)適用於Windows XP系統(tǒng)的WindowsXP類,為了善用系統(tǒng)資源,您在實(shí)作IWindow介面時(shí),會將與系統(tǒng)相關(guān)的實(shí)現(xiàn)代碼撰寫在介面的實(shí)作中。

假設(shè)今天您繼承了IWindow介面撰寫了一個(gè)I3DWindow介面,當(dāng)中擴(kuò)充一個(gè)drawBox()方法用於3D圖形的繪製,簡單的說, I3DWindow介面擴(kuò)充了抽象行為,為了讓實(shí)現(xiàn)I3DWindow的類別也能在XWindow與Windows XP兩個(gè)不同的系統(tǒng)中運(yùn)行,您必須再度撰寫與系統(tǒng)相關(guān)的實(shí)現(xiàn)代碼。
簡單的說,抽象行為定義與平臺相關(guān)實(shí)現(xiàn)混雜在一起了,為了將抽象部份與它的實(shí)現(xiàn)部份分離,使它們都可以獨(dú)立地變化,您可以使用以下的結(jié)構(gòu)。
在上圖的右邊中,與平臺相關(guān)的實(shí)現(xiàn)部份,被與右邊抽象行方面的發(fā)展分開了,左邊的抽象部份您可以一直發(fā)展下去,而不再因?yàn)榻壎似脚_特定實(shí)作方法,而使得整個(gè)結(jié)構(gòu)越來越失去彈性。
Bridge模式的 UML 類別結(jié)構(gòu)圖如下:
這句話寫得簡短,這邊再作進(jìn)一步的解釋,抽象部份指的是行為方面定義,實(shí)現(xiàn)方面指的是與特定平臺相依的代碼實(shí)現(xiàn)。
一個(gè)實(shí)際的例子在Gof書中有提到,假設(shè)您定義了一個(gè)IWindow介面,這個(gè)介面只定義一些抽象的繪圖行為,而不涉及平臺的實(shí)作,今天您可以繼承這個(gè)類來開發(fā)適用於X Window的XWindow類,也可以繼承這個(gè)類來開發(fā)適用於Windows XP系統(tǒng)的WindowsXP類,為了善用系統(tǒng)資源,您在實(shí)作IWindow介面時(shí),會將與系統(tǒng)相關(guān)的實(shí)現(xiàn)代碼撰寫在介面的實(shí)作中。

假設(shè)今天您繼承了IWindow介面撰寫了一個(gè)I3DWindow介面,當(dāng)中擴(kuò)充一個(gè)drawBox()方法用於3D圖形的繪製,簡單的說, I3DWindow介面擴(kuò)充了抽象行為,為了讓實(shí)現(xiàn)I3DWindow的類別也能在XWindow與Windows XP兩個(gè)不同的系統(tǒng)中運(yùn)行,您必須再度撰寫與系統(tǒng)相關(guān)的實(shí)現(xiàn)代碼。

簡單的說,抽象行為定義與平臺相關(guān)實(shí)現(xiàn)混雜在一起了,為了將抽象部份與它的實(shí)現(xiàn)部份分離,使它們都可以獨(dú)立地變化,您可以使用以下的結(jié)構(gòu)。

在上圖的右邊中,與平臺相關(guān)的實(shí)現(xiàn)部份,被與右邊抽象行方面的發(fā)展分開了,左邊的抽象部份您可以一直發(fā)展下去,而不再因?yàn)榻壎似脚_特定實(shí)作方法,而使得整個(gè)結(jié)構(gòu)越來越失去彈性。
Bridge模式的 UML 類別結(jié)構(gòu)圖如下:
