一、意圖
將抽象部分與它的實現部分分離,使他們都可以獨立的變化。
二、適用性
以下一些情況使用Bridge模式
你不希望在抽象和它的實現部分之間有一個固定的綁定關系。例如這種情況可能因為,在程序運行時刻實現部分應可以被選擇或者切換。
類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充。這時Bridge模式使你可以對不同的抽象接口和實現部分進行組合,并分別對他們進行擴充。
對一個抽象的實現部分的修改應對客戶不產生影響,即客戶代碼不必重新編譯。
(C++)你想對客戶完全隱藏抽象的實現部分。在C++中,類的表示在類接口中是可見的。
三、結構
四、代碼
1
2
3
4
5
6
|
public interface Implementor { /** * 實現抽象部分的具體方法 */ public void operationImpl(); } |
1
2
3
4
5
6
|
public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println( "ConcreteImplementorA" ); } } |
1
2
3
4
5
6
|
public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println( "ConcreteImplementorB" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public abstract class Abstraction { private Implementor mImplementor; /** * 通過實現部分對象的引用構造抽象部分的對象 * * @param implementor 實現部分對象的引用 */ public Abstraction(Implementor implementor){ mImplementor = implementor; } public void operation(){ mImplementor.operationImpl(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class RefinedAbstraction extends Abstraction { /** * 通過實現部分對象的引用構造抽象部分的對象 * * @param implementor 實現部分對象的引用 */ public RefinedAbstraction(Implementor implementor) { super (implementor); } public void refinedOperation(){ //對 Abstraction中的方法進行擴展。 System.out.println( "refinedOperation" ); operation(); } } |
1
2
3
4
5
6
7
|
public class Client { public static void main(String[] args){ Abstraction abstraction = new RefinedAbstraction( new ConcreteImplementorA()); abstraction.operation(); } } |
如有疑問請留言或者到本站這區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/a992036795/article/details/52756256