設計模式-橋梁模式(11)
阿新 • • 發佈:2017-12-14
靈活 new ati 封裝 err 橋接模式 efi 分離 over
定義
橋梁結構(Bridge Pattern)也稱橋接模式,是一種簡單但不常使用的設計模式。
英文原話是:Decouple an abstraction from its implementation so that the two can vary independently.意思是:將抽象和實現解耦,使得兩者可以獨立的變化。
橋梁角色有四種角色:
- 抽象化(Abstraction)角色:該角色抽象化給出的定義,並保存一個對實現化對象的引用。
- 實現化(Implementor)角色:該角色給出實現化角色的接口,但不給出具體的實現。
- 修正抽象化(RefinedAbstraction)角色:該角色擴展抽象化角色,它引用實現化角色並對抽象化角色進行修正。
- 具體實現化(ConcreteImplementor)角色:該角色對實現化角色接口中的方法進行具體實現。
/** * 實現化角色 */ public interface Implementor { //方法的實現化聲明 public void operationImpl(); } /** * 具體實現化角色 */ public class ConcreteImplementor implements Implementor { //方法的實現化實現 @Override public void operationImpl() { System.out.println("具體實現化角色"); } } /** * 抽象化角色 */ public abstract class Abstraction { //定義對實現化角色的引用 private Implementor imp; public Abstraction(Implementor imp) { this.imp = imp; } public void operation() { this.imp.operationImpl(); } } /** * 修正抽象化角色*/ public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor imp) { super(imp); } //修改父類的方法 public void operation(){ super.operation(); System.out.println("修正抽象化角色"); } }
//調用
public class Client {
public static void main(String[] args) {
//定義一個實現化角色
Implementor imp = new ConcreteImplementor();
//定義一個抽象化角色
Abstraction abstraction = new RefinedAbstraction(imp);
abstraction.operation();
}
}
橋梁模式的優點
- 抽象和實現的分離,是橋梁模式的主要特點,橋梁模式是為了解決繼承的缺點而提出的設計模式。在該模式下,實現可以不受抽象的約束,不用綁定在一個固定的抽象層次上。
- 實現對客戶透明。客戶端不用關心實現的細節,它已經由抽象層通過聚合關系完成了封裝。
- 提高代碼的靈活性和擴展性。
使用場景
一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的聯系。
設計要求實現化角色的任何改變不應當影響客戶端,或者說實現化角色的改變對客戶端來說是完全透明的。
一個 構件多於一個的抽象化角色和實現化角色,系統需要它們之間進行動態耦合。
不希望或者不適合使用繼承的場合。繼承具有強入侵性質,即父類有的方法,子類必須有;而橋梁模式是弱關聯關系。因此對於明確不發生變化的,則可以通過繼承完成;若不能確定是否會發生變化,則通過橋梁模式來解決。
設計模式-橋梁模式(11)