桥梁模式

桥梁模式也叫桥接模式,其定义如下:将抽象和实现解耦,使得两者可以独立变化。它的重点在“解耦”上面。

它有一下四个角色:

  • Abstraction抽象角色:它的职责是定义该角色的行为,同时保存对一个实现化角色的引用,该角色一般是一个抽象类。
  • Implementor实现化角色:它是接口或抽象类,定义角色所必须的行为和属性。
  • RefinedAbstraction修正抽象化角色:它引用实现化角色对抽象化角色进行修正。
  • ConcreateImplementor具体实现化角色:他实现接口或抽象类角色定义的方法和属性。

下面看一个通用代码:

//实现化角色
public interface implementor{
    //基本方法
    public void doSomething();
    public void doAnything();
}

//具体实现化角色
public class ConcreateImplementor1 implements Implementor{
    public void doSomething(){
    }
    public void doAnything(){
    }
}
public class ConcreateImplementor2 implements Implementor{
    public void doSomething(){
    }
    public void doAnything(){
    }
}
//抽象化角色
public abstract class Abstraction{
    //定义对实现化角色的引用
    private Implementor imp;
    //约束子类必须实现的构造函数
    public Abstraction(Implementor impl){
        this.imp = impl;
    }
    //自身的行为或属性
    public void request(){
        this.imp.doSomething();
    }
    //获得实现化角色
    public Implementor getImpl(){
        return imp;
    }
}

//具体抽象化角色
public class RedifinedAbstraction extends Abstraction{
    public RedifinedAbstraction(Implementor impl){
        super(impl);
    }
    //修正父类的行为
    @Override
    public void request(){
        super.request();
        super.getImpl.doSomething();
    }
}

//场景类
public class Client{
    public static void main(String[] args){
        //定义一个实现化角色
        Implementor imp = new ConcreateImplementor1();
        //定义一个抽象化角色
        Abstraction abs = new RedifinedAbstraction(imp);
        //执行行文
        abs.request();
    }
}

桥梁模式的优点:

  • 抽象和实现分离:这源于桥梁模式的特点,完全是为了解决继承的缺点而提出的,在这种模式下,实现可以不受抽象的约束,不再绑定到一个固定的抽象层次上。
  • 优秀的扩充能力。
  • 实现细节对客户透明:客户不用关心细节的实现,他已经由抽象层通过聚合完成了封装。

使用场景:

  • 不希望或不适合使用继承的场景:比如继承层次过度,无法更细化设计颗粒的场景
  • 接口或抽象类不稳定的场景:明知道接口不稳定,可能会经常发生变化,还要使用继承或实现来实现业务需求,那是得不偿失的。
  • 重用性要求比较高的场景:设计的颗粒度越细,被重用的的可能性越大,而采用继承则受限于父类,难以实现细粒度设计。
原文地址:https://www.cnblogs.com/loveBolin/p/9743498.html