從橋接模式與策略模式談起

          橋接(Bridge)模式是結(jié)構(gòu)型模式的一種,而策略(strategy)模式則屬于行為模式。以下是它們的UML結(jié)構(gòu)圖。

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

           

          在策略模式中,Context也使用聚合的方式引用Startegy抽象接口。

           

          從他們的結(jié)構(gòu)圖可知,在這兩種模式中,都存在一個對象使用聚合的方式引用另一個對象的抽象接口的情況,而且該抽象接口的實(shí)現(xiàn)可以有多種并且可以替換。可以說兩者在表象上都是調(diào)用者與被調(diào)用者之間的解耦,以及抽象接口與實(shí)現(xiàn)的分離。

          那么兩者的區(qū)別體現(xiàn)在什么地方呢?

          1. 首先,在形式上,兩者還是有一定區(qū)別的,對比兩幅結(jié)構(gòu)圖,我們可以發(fā)現(xiàn),在橋接模式中不僅Implementor具有變化(ConcreateImplementior),而且Abstraction也可以發(fā)生變化(RefinedAbstraction),而且兩者的變化是完全獨(dú)立的,RefinedAbstraction與ConcreateImplementior之間松散耦合,它們僅僅通過Abstraction與Implementor之間的關(guān)系聯(lián)系起來。而在策略模式中,并不考慮Context的變化,只有算法的可替代性。

          2. 其次在語意上,橋接模式強(qiáng)調(diào)Implementor接口僅提供基本操作,而Abstraction則基于這些基本操作定義更高層次的操作。而策略模式強(qiáng)調(diào)Strategy抽象接口的提供的是一種算法,一般是無狀態(tài)、無數(shù)據(jù)的,而Context則簡單調(diào)用這些算法完成其操作。

          3. 橋接模式中不僅定義Implementor的接口而且定義Abstraction的接口,Abstraction的接口不僅僅是為了與Implementor通信而存在的,這也反映了結(jié)構(gòu)型模式的特點(diǎn):通過繼承、聚合的方式組合類和對象以形成更大的結(jié)構(gòu)。在策略模式中,Startegy和Context的接口都是兩者之間的協(xié)作接口,并不涉及到其它的功能接口,所以它是行為模式的一種。行為模式的主要特點(diǎn)就是處理的是對象之間的通信方式,往往是通過引入中介者對象將通信雙方解耦,在這里實(shí)際上就是將Context與實(shí)際的算法提供者解耦。

          所以相對策略模式,橋接模式要表達(dá)的內(nèi)容要更多,結(jié)構(gòu)也更加復(fù)雜。橋接模式表達(dá)的主要意義其實(shí)是接口隔離的原則,即把本質(zhì)上并不內(nèi)聚的兩種體系區(qū)別開來,使得它們可以松散的組合,而策略在解耦上還僅僅是某一個算法的層次,沒有到體系這一層次。從結(jié)構(gòu)圖中可以看到,策略的結(jié)構(gòu)是包容在橋接結(jié)構(gòu)中的,橋接中必然存在著策略模式,Abstraction與Implementor之間就可以認(rèn)為是策略模式,但是橋接模式一般Implementor將提供一系列的成體系的操作,而且Implementor是具有狀態(tài)和數(shù)據(jù)的靜態(tài)結(jié)構(gòu)。而且橋接模式Abstraction也可以獨(dú)立變化。

           

          參考:呂震宇的設(shè)計(jì)模式隨筆——蠟筆與毛筆的故事

          Bridge Strategy 和State的區(qū)別 后續(xù)的討論,很有啟發(fā)。

          posted @ 2007-04-25 15:44 雁過無痕 閱讀(6434) | 評論 (3)編輯 收藏

          僅列出標(biāo)題
          共3頁: 上一頁 1 2 3 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(7)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜兰县| 沁阳市| 新化县| 贵德县| 武隆县| 长子县| 靖州| 海林市| 南通市| 成安县| 亳州市| 桃江县| 荆州市| 璧山县| 聂荣县| 南涧| 额敏县| 稷山县| 达孜县| 阜新| 镇原县| 云梦县| 九台市| 泸定县| 巨野县| 祁连县| 竹山县| 高邑县| 贵州省| 宜兴市| 丘北县| 缙云县| 宁明县| 温州市| 汉川市| 新龙县| 阆中市| 武强县| 永清县| 铁岭县| 丰城市|