天天看點

政策模式與橋接模式差別

實際上所有模式可以隻分為類模式和對象模式兩種,類模式是用繼承而對象模式是用委托。

Bridge模式和Strategy模式相似就是因為他們都将任務委托給了另外一個接口的具體實作,他們之間的差別在于Bridge的目的是讓底層實作和上層接口可以分别演化,進而提高移植性而Strategy的目的是将複雜的算法封裝起來,進而便于替換不同的算法。是以可以想象一般情況下Bridge的實作幾乎不會在運作時更改而Strategy的算法則很有可能需要在運作時更換,這就導緻在細節方面需要考慮的因素可能會很不相同。

strategy模式是為了擴充和修改,并提供動态配置。它往往可以在同一環境當中使用不同的政策,就是調用不同的派生類。其内部實作是自由的,不受已有的類接口的限制(很多時候根本就不調用現成的接口)。bridge模式是往往是為了利用已有的方法或類。它将原來不統一,不相容的接口封裝起來,變成統一的接口。它的應用往往是不同的環境或平台下隻能選擇一 種,它的主要作用不是配置而是定義通用接口。

橋接模式如下:

政策模式與橋接模式差別

政策如下:

政策模式與橋接模式差別

在橋接中,Abstraction通過聚合方式引用Implementor.

在政策中,Context也通過聚合引用Strategy.

橋接(Bridge)模式是結構型模式的一種,而政策(strategy)模式則屬于行為模式。

從他們的結構圖可知,在這兩種模式中,都存在一個對象使用聚合的方式引用另一個對象的抽象接口的情況,而且該抽象接口的實作可以有多種并且可以替換。可以說兩者在表象上都是調用者與被調用者之間的解耦,以及抽象接口與實作的分離。

那麼兩者的差別展現在什麼地方呢?

1. 首先,在形式上,兩者還是有一定差別的,對比兩幅結構圖,我們可以發現,在橋接模式中不僅Implementor具有變化(ConcreateImplementior),而且Abstraction也可以發生變化(RefinedAbstraction),而且兩者的變化是完全獨立的,RefinedAbstraction與ConcreateImplementior之間松散耦合,它們僅僅通過Abstraction與Implementor之間的關系聯系起來。而在政策模式中,并不考慮Context的變化,隻有算法的可替代性。

2. 其次在語意上,橋接模式強調Implementor接口僅提供基本操作,而Abstraction則基于這些基本操作定義更高層次的操作。而政策模式強調Strategy抽象接口的提供的是一種算法,一般是無狀态、無資料的,而Context則簡單調用這些算法完成其操作。

繼續閱讀