橋接模式與策略模式區別

2022-03-05 02:58:13 字數 1253 閱讀 3591

橋接(bridge)模式是結構型模式的一種,而策略(strategy)模式則屬於行為模式。以下是它們的uml結構圖。

在橋接模式中,abstraction通過聚合的方式引用implementor。

在策略模式中,context也使用聚合的方式引用startegy抽象介面。

從他們的結構圖可知,在這兩種模式中,都存在乙個物件使用聚合的方式引用另乙個物件的抽象介面的情況,而且該抽象介面的實現可以有多種並且可以替換。可以說兩者在表象上都是呼叫者與被呼叫者之間的解耦,以及抽象介面與實現的分離。

那麼兩者的區別體現在什麼地方呢?

1. 首先,在形式上,兩者還是有一定區別的,對比兩幅結構圖,我們可以發現,在橋接模式中不僅implementor具有變化(concreateimplementior),而且abstraction也可以發生變化(refinedabstraction),而且兩者的變化是完全獨立的,refinedabstraction與concreateimplementior之間鬆散耦合,它們僅僅通過abstraction與implementor之間的關係聯絡起來。而在策略模式中,並不考慮context的變化,只有演算法的可替代性。

2. 其次在語意上,橋接模式強調implementor介面僅提供基本操作,而abstraction則基於這些基本操作定義更高層次的操作。而策略模式強調strategy抽象介面的提供的是一種演算法,一般是無狀態、無資料的,而context則簡單呼叫這些演算法完成其操作。

3. 橋接模式中不僅定義implementor的介面而且定義abstraction的介面,abstraction的介面不僅僅是為了與implementor通訊而存在的,這也反映了結構型模式的特點:通過繼承、聚合的方式組合類和物件以形成更大的結構。在策略模式中,startegy和context的介面都是兩者之間的協作介面,並不涉及到其它的功能介面,所以它是行為模式的一種。行為模式的主要特點就是處理的是物件之間的通訊方式,往往是通過引入中介者物件將通訊雙方解耦,在這裡實際上就是將context與實際的演算法提供者解耦。

所以相對策略模式,橋接模式要表達的內容要更多,結構也更加複雜。橋接模式表達的主要意義其實是介面隔離的原則,即把本質上並不內聚的兩種體系區別開來,使得它們可以鬆散的組合,而策略在解耦上還僅僅是某乙個演算法的層次,沒有到體系這一層次。從結構圖中可以看到,策略的結構是包容在橋接結構中的,橋接中必然存在著策略模式,abstraction與implementor之間就可以認為是策略模式,但是橋接模式一般implementor將提供一系列的成體系的操作,而且implementor是具有狀態和資料的靜態結構。而且橋接模式abstraction也可以獨立變化。

關於「策略模式」與「橋接模式」的問題

主要是意圖不同。很多設計模式的結構都是一樣的。有些高手說,設計模式學習到後來只剩下乙個。恩。這個我也想不起來了。莫非是外觀模式?我想說,設計模式更適合事後驗證,而不是設計前,中的參考。掌握了設計模式的思考方式,把變化不變化,穩定非穩定的隔離開,自然會出現設計模式的影子。重構到模式吧。4人組的23個模...

NAT模式與橋接模式的區別

vmnet0 用於虛擬橋接網路下的虛擬交換機 vmnet1 用於虛擬host only網路下的虛擬交換機 vmnet8 用於虛擬nat網路下的虛擬交換機 vmware networkadepter vmnet1 host用於與host only虛擬網路進行通訊的虛擬網絡卡 vmware networ...

設計模式 橋接模式

橋接模式 多維 如車行駛在路上。車分各種品牌 各種型號各種排氣 道路分街道 告訴 山地等 駕駛員分男女 為了減少類的數量。如果按照繼承實現會照成大量冗餘的類,類的數量會相當之大 package com.cn.duduyu.bridgepattern.car public abstract class...