努力保头发的打工人
努力保头发的打工人
发布于 2021-01-24 / 18 阅读 / 0 评论 / 0 点赞

桥接模式

1 定义

将抽象和实现解耦,使得两者可以独立地变化。

类图如下:

桥接模式类图.png

  • abstraction 抽象化角色,同时保存对一个实现化角色的引用

  • implementor 实现化角色,接口或抽象类,定义该角色的行为和属性

  • refinedabstraction 修正抽象化角色

  • concreteimplementor 具体实现化角色,实现接口或抽象类的方法和属性

2 代码示例

实现抽象和实现

/**
 * @author chiangtaol
 * @date 2020-12-11
 * @describe 实现化接口
 */
public interface Implementor {
​
    void doSomething1();
​
    void doSomething2();
}
​
/**
 * @author chiangtaol
 * @date 2020-12-11
 * @describe 实现化接口实现类
 */
public class ConcreteImplementor1 implements Implementor{
    @Override
    public void doSomething1() {
        System.out.println("实现类1方法1..");
    }
​
    @Override
    public void doSomething2() {
        System.out.println("实现类1方法2..");
    }
}
​
/**
 * @author chiangtaol
 * @date 2020-12-11
 * @describe 实现化接口实现类
 */
public class ConcreteImplementor2 implements Implementor{
    @Override
    public void doSomething1() {
        System.out.println("实现类2方法1..");
    }
​
    @Override
    public void doSomething2() {
        System.out.println("实现类2方法2..");
    }
}

抽象化角色和实现类

/**
 * @author chiangtaol
 * @date 2020-12-11
 * @describe 抽象化角色
 */
public abstract class Abstraction {
​
    private Implementor implementor;
​
    public Abstraction(Implementor implementor){
        this.implementor = implementor;
    }
​
    public Implementor getImplementor() {
        return implementor;
    }
​
    public abstract void run();
}
​
/**
 * @author chiangtaol
 * @date 2020-12-11
 * @describe 具体抽象化角色
 */
public class RefinedAbstraction extends Abstraction{
​
​
    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }
​
    @Override
    public void run(){
        super.getImplementor().doSomething1();
        super.getImplementor().doSomething2();
    }
}

3 总结

3.1 优点
  • 抽象和实现分离:为了解决继承缺点而提出的设计模式,该模式下,实现可以不受抽象的约束,不用再绑定到一个固定的抽象层次上。

  • 优秀的扩展能力:抽象和继承的解耦的好处

  • 实现细节对客户透明

3.2应用场景
  • 不希望使用继承的场景

  • 接口或抽象不稳定的场景

  • 重用性要求较高的场景