1. 程式人生 > >設計模式-結構型- 橋接模式(Bridge)

設計模式-結構型- 橋接模式(Bridge)

定義

將抽象部分與它的實現部分分享,使它們都可以獨立地變化

角色

抽象角色(Abstraction):定義了抽象類的介面而且維護著一個指向實現角色的引用

具體抽象角色(RefinedAbstraction):實現並擴充由抽象角色定義的介面

實現角色(Implementor):給出了實現類的介面,這裡的介面與抽象角色中的介面可以不一致

具體實現角色(ConcreteImplementor):給出了實現角色定義介面的具體實現

優點

  • 將可能的變化封裝了起來,降低了變化產生的影響
  • 抽象部分和實現部分各自的變動不會破壞系統的結構;也就是降低了耦合
  • 實現細節對客戶是透明的

適用場景

  • 當系統中有多個地方要使用到類似的行為,或者多個類似行為的組合時
  • 系統中某個類的行為可能會有不同的變化趨勢,為了將變化有效的封裝起來時
  • 一個行為可能被不同的類使用時

類圖

Bridge

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();
    }
}

BridgeResult
本文程式碼可在github檢視:點選此處