橋接模式與其它幾種相近的設計模式之間的區別與比較

  • 完整版地址: http://chjavach.iteye.com/blog/756233

  • 橋接模式和策略模式
        這兩個模式有很大的相似之處。
        如果把橋接模式的抽象部分簡化來看,如果暫時不去擴展Abstraction,也就是去掉RefinedAbstraction。橋接模式簡化過後的結構圖參見圖13。再看策略模式的結構圖參見圖17.1。會發現,這個時候它們的結構都類似如圖18所示:


                                    圖18  橋接模式和策略模式結構示意圖
        通過上面的結構圖,可以體會到橋接模式和策略模式是如此相似。可以把策略模式的Context視做是使用接口的對象,而Strategy就是某個接口了,具體的策略實現那就相當於接口的具體實現。這樣看來的話,某些情況下,可以使用橋接模式來模擬實現策略模式的功能。
        這兩個模式雖然相似,也還是有區別的。最主要的是模式的目的不一樣,策略模式的目的是封裝一系列的算法,使得這些算法可以相互替換;而橋接模式的目的是分離抽象和實現部分,使得它們可以獨立的變化。
  • 橋接模式和狀態模式
        由於從模式結構上看,狀態模式和策略模式是一樣的,這兩個模式的關係也基本上類似於橋接模式和策略模式的關係。
        只不過狀態模式的目的是封裝狀態對應的行爲,並在內部狀態改變的時候改變對象的行爲。
  • 橋接模式和模板方法模式
        這兩個模式有相似之處。
        雖然標準的模板方法模式是採用繼承來實現的,但是模板方法也可以通過回調接口的方式來實現,如果把接口的實現獨立出去,那就類似於模板方法通過接口去調用具體的實現方法了。這樣的結構就和簡化的橋接模式類似了。
        可以使用橋接模式來模擬實現模板方法模式的功能。如果在實現Abstraction對象的時候,在裏面定義方法,方法裏面就是某個固定的算法骨架,也就是說這個方法就相當於模板方法。在模板方法模式裏,是把不能確定實現的步驟延遲到子類去實現;現在在橋接模式裏面,把不能確定實現的步驟委託給具體實現部分去完成,通過回調實現部分的接口,來完成算法骨架中的某些步驟。這樣一來,就可以實現使用橋接模式來模擬實現模板方法模式的功能了。
        使用橋接模式來模擬實現模板方法模式的功能,還有個潛在的好處,就是模板方法也可以很方便的擴展和變化了。在標準的模板方法裏面,一個問題就是當模板發生變化的時候,所有的子類都要變化,非常不方便。而使用橋接模式來實現類似的功能,就沒有這個問題了。
        另外,這裏只是說從實現具體的業務功能上,橋接模式可以模擬實現出模板方法模式能實現的功能,並不是說橋接模式和模板方法模式就變成一樣的,或者是橋接模式就可以替換掉模板方法模式了。要注意它們本身的功能、目的、本質思想都是不一樣的。
  • 橋接模式和抽象工廠模式
        這兩個模式可以組合使用。
        橋接模式中,抽象部分需要獲取相應的實現部分的接口對象,那麼誰來創建實現部分的具體實現對象呢?這就是抽象工廠模式派上用場的地方。也就是使用抽象工廠模式來創建和配置一個特定的具體實現的對象。
        事實上,抽象工廠主要是用來創建一系列對象的,如果創建的對象很少,或者是很簡單,還可以採用簡單工廠,可以達到一樣的效果,但是會比抽象工廠來得簡單。
  • 橋接模式和適配器模式
        這兩個模式可以組合使用。
        這兩個模式功能是完全不一樣的,適配器模式的功能主要是用來幫助無關的類協同工作,重點在解決原本由於接口不兼容而不能一起工作的那些類,使得它們可以一起工作。而橋接模式則重點在分離抽象和實現部分。
        所以在使用上,通常在系統設計完成過後,纔會考慮使用適配器模式;而橋接模式,是在系統開始的時候就要考慮使用。
        雖然功能上不一樣,這兩個模式還是可以組合使用的,比如:已有實現部分的接口,但是有些不太適應現在新的功能對接口的需要,完全拋棄吧,有些功能還用得上,該怎麼辦呢?那就使用適配器來進行適配,使得舊的接口能夠適應新的功能的需要。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章