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

策略模式:

在橋接模式中,Abstraction通過聚合的方式引用Implementor。
### 舉一個例子:
**策略模式:**我要畫圓,要實心圓,我可以用solidPen來配置,畫虛線圓可以用dashedPen來配置。這是strategy模式。
**橋接模式:**同樣是畫圓,我是在windows下來畫實心圓,就用windowPen+solidPen來配置,在unix下畫實心圓就用unixPen+solidPen來配置。如果要再windows下畫虛線圓,就用windowsPen+dashedPen來配置,要在unix下畫虛線圓,就用unixPen+dashedPen來配置。
畫圓方法中,策略只是考慮算法的替換,而橋接考慮的則是不同平臺下需要調用不同的工具,接口只是定義一個方法,而具體實現則由具體實現類完成。
### 區別:
橋接模式:不僅Implementor具有變化(ConcreteImplementor),而且Abstraction也可以發生變化(RefinedAbstraction),而且兩者的變化是完全獨立的,RefinedAbstraction與ConcreateImplementor之間松散耦合,它們僅僅通過Abstraction與Implementor之間的關系聯系起來。強調Implementor接口僅提供基本操作,而Abstraction則基于這些基本操作定義更高層次的操作。
策略模式:并不考慮Context的變化,只有算法的可替代性。強調Strategy抽象接口的提供的是一種算法,一般是無狀態、無數據的,Context簡單調用這些算法完成其操作。
所以相對策略模式,橋接模式要表達的內容要更多,結構也更加復雜。
橋接模式表達的主要意義其實是接口隔離的原則,即把本質上并不內聚的兩種體系區別開來,使得它們可以松散的組合,而策略在解耦上還僅僅是某一個算法的層次,沒有到體系這一層次。
從結構圖中可以看到,策略模式的結構是包容在橋接模式結構中的,Abstraction與Implementor之間就可以認為是策略模式,但是橋接模式一般Implementor將提供一系列的成體系的操作,而且Implementor是具有狀態和數據的靜態結構。而且橋接模式Abstraction也可以獨立變化。
參考:[http://c610367182.iteye.com/blog/1965668](http://c610367182.iteye.com/blog/1965668)
[http://www.blogjava.net/wangle/archive/2007/04/25/113545.html](http://www.blogjava.net/wangle/archive/2007/04/25/113545.html)
- 前言
- 設計原則(一)"開-閉"原則(OCP)
- 設計原則(二)里氏替換原則(LSP)
- 設計原則(三)組合復用原則
- 設計原則(四)依賴倒置原則(DIP)
- 設計模式(一)簡單工廠模式
- 設計模式(二)工廠方法模式
- 設計模式(三)抽象工廠模式
- 設計模式(四)單例模式
- 設計模式(五)創建者模式(Builder)
- 設計模式(六)原型模式
- 設計模式(七)門面模式(Facade Pattern 外觀模式)
- 設計模式(八)橋梁模式(Bridge)
- 設計模式(九)裝飾模式(Decorator)
- 設計模式(十)適配器模式
- 設計模式(十一)策略模式
- 設計模式(十二)責任鏈模式
- 設計模式之UML(一)類圖以及類間關系(泛化 、實現、依賴、關聯、聚合、組合)
- 設計模式之橋梁模式和策略模式的區別