設計模式-結構型- 橋接模式(Bridge)
阿新 • • 發佈:2019-02-02
定義
將抽象部分與它的實現部分分享,使它們都可以獨立地變化
角色
抽象角色(Abstraction):定義了抽象類的介面而且維護著一個指向實現角色的引用
具體抽象角色(RefinedAbstraction):實現並擴充由抽象角色定義的介面
實現角色(Implementor):給出了實現類的介面,這裡的介面與抽象角色中的介面可以不一致
具體實現角色(ConcreteImplementor):給出了實現角色定義介面的具體實現
優點
- 將可能的變化封裝了起來,降低了變化產生的影響
- 抽象部分和實現部分各自的變動不會破壞系統的結構;也就是降低了耦合
- 實現細節對客戶是透明的
適用場景
- 當系統中有多個地方要使用到類似的行為,或者多個類似行為的組合時
- 系統中某個類的行為可能會有不同的變化趨勢,為了將變化有效的封裝起來時
- 一個行為可能被不同的類使用時
類圖
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public abstract class Abstraction {
protected Implementor implementor;
public Implementor getImplementor() {
return implementor;
}
abstract public void operation();
}
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public class RefinedAbstraction extends Abstraction {
@Override
public void operation() {
implementor.operation();
}
}
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public abstract class Implementor {
abstract public void operation();
}
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public class ConcreteImplementorA extends Implementor {
@Override
public void operation() {
System.out.println("ConcreteImplementorA oprration");
}
}
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public class ConcreteImplementorB extends Implementor {
@Override
public void operation() {
System.out.println("ConcreteImplementorB operation");
}
}
package com.vapy.structure.Bridge;
/**
*
* @author vapy 2016年9月3日
*
*/
public class Client {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.implementor = new ConcreteImplementorA();
abstraction.operation();
abstraction.implementor = new ConcreteImplementorB();
abstraction.operation();
}
}
本文程式碼可在github檢視:點選此處