Fork me on GitHub

设计模式-桥梁模式(11)

定义

  桥梁结构(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();
    }
}

源码

抽象类(Abstraction)的option方法具体执行为接口类(Implementor)的optionImpl方法,option()和​optionImpl​()的具体实现又可以由抽象类的子类(RefinedAbstraction)和接口的实现类(ConcreteImplementor)实现。

桥梁模式的优点

  • 抽象和实现的分离,是桥梁模式的主要特点,桥梁模式是为了解决继承的缺点而提出的设计模式。在该模式下,实现可以不受抽象的约束,不用绑定在一个固定的抽象层次上。
  • 实现对客户透明。客户端不用关心实现的细节,它已经由抽象层通过聚合关系完成了封装。
  • 提高代码的灵活性和扩展性。

使用场景

  一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。

  设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端来说是完全透明的。

  一个 构件多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。

  不希望或者不适合使用继承的场合。继承具有强入侵性质,即父类有的方法,子类必须有;而桥梁模式是弱关联关系。因此对于明确不发生变化的,则可以通过继承完成;若不能确定是否会发生变化,则通过桥梁模式来解决。

 

posted @ 2017-12-13 22:39  秋夜雨巷  阅读(178)  评论(0编辑  收藏  举报