概述
橋接模式一種結構型模式,它主要應對的是:由于實際的需要,某個類具有兩個或以上的維度變化,如果只是用繼承將無法實現這種需要,或者使得設計變得相當臃腫。
橋接模式的做法是把變化的部分抽象出來,使變化部分與主類分離開來,從而將多個維度的變化徹底分離。最后,提供一個管理類來組合不同維度上的變化,通過這種組合來滿足業務的需要。
UML結構圖
代碼示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package interview; interface Implementor{ void operationImpl(); } abstract class Abstraction{ protected Implementor implementor; public Abstraction(Implementor implementor){ this .implementor = implementor; } public void operation(){ implementor.operationImpl(); } } class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println( "具體實現A" ); } } class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println( "具體實現B" ); } } class RefinedAbstraction extends Abstraction{ public RefinedAbstraction(Implementor implementor) { super (implementor); } public void otherOperation(){ System.out.println( "其他操作" ); } } public class MainTest { public static void main(String arg[]) { Implementor implementor = new ConcreteImplementorA(); RefinedAbstraction abstraction = new RefinedAbstraction(implementor); abstraction.operation(); abstraction.otherOperation(); } } |
使用場景
1.如果你不希望在抽象和實現部分采用固定的綁定關系,可以采用橋接模式,來把抽象和實現部分分開,然后在程序運行期間來動態的設置抽象部分需要用到的具體實現,還可以動態切換具體的實現。
2.如果出現抽象部分和實現部分都應該可以擴展的情況,可以采用橋接模式,讓抽象部分和實現部分可以獨立的變化,從而可以靈活的進行單獨擴展,而不是攪在一起,擴展一邊可以影響另一邊。
3.如果希望實現部分的修改,不會對客戶產生影響,可以采用橋接模式,客戶是面向抽象的接口在運行,實現部分的修改,可以獨立于抽象部分,也就不會對客戶產生影響了,也可以說對客戶是透明的。
4.如果采用繼承的實現方案,會導致產生很多子類,對于這種情況,可以考慮采用橋接模式,分析功能變化的原因,看看是否能分離成不同的維度,然后通過橋接模式來分離他們,從而減少子類的數目。
如果一個系統需要在構建的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的聯系。
抽象化角色和具體化角色都應該可以被子類擴展。在這種情況下,橋接模式可以靈活地組合不同的抽象化角色和具體化角色,并獨立化地擴展。
設計要求實現化角色的任何改變不應當影響客戶端,或者說實現化角色的改變對客戶端是完全透明的。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。