设计模式--桥接模式

桥接模式也称为桥梁模式、接口模式或者柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。

桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多继承的方式,但是多重继承方案往往违背了类的单一职责原则,其复用性比较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现。

桥接模式UML类图:

抽象(Abstraction):该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);

修正抽象(RefinedAbstraction):Abstraction的具体实现,对Abstraction的方法进行完善和扩展;

实现(Implementor):确定实现维度的基本操作,提供给Abstraction使用。该类一般为接口或抽象类;

具体实现(ConcreteImplementor):Implementor的具体实现。

桥接模式的通用写法:

创建抽象角色Abstraction类:

public abstract class Abstraction {

    protected Implementor implementor;

    public Abstraction(Implementor implementor){
        this.implementor = implementor;
    }

    public void operation(){
        this.implementor.operationImpl();
    }
}

创建修正抽象角色RefinedAbstraction类:

public class RefinedAbstraction extends Abstraction{

    public RefinedAbstraction(Implementor implementor){
        super(implementor);
    }

    @Override
    public void operation() {
        super.operation();
        System.out.println("refined operation");
    }
}

创建实现角色Implementor类:

public interface Implementor {
    void operationImpl();
}

创建具体实现ConcreteImplementorA类:

public class ConcreteImplementorA implements Implementor{

    @Override
    public void operationImpl() {
        System.out.println("I'm ConcreteImplementor A");
    }
}

桥接模式的应用场景:

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适用于以下几种业务场景:

1、在抽象和具体实现之间需要增加更多的灵活性的场景;

2、一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展。

3、不希望使用继承,或因为多层继承导致系统类的个数剧增。

设计模式有一个原则:优先使用组合/聚合的方式,而不是继承。

桥接模式在源码中的应用:

JDBC API,其中有一个Driver类就是桥接对象。这里以mysql为例。

类图:

桥接模式的优缺点:

桥接模式遵循了里氏替换原则和依赖倒置原则,最终实现了开闭原则,对修改关闭,对扩展开放。

优点:

1、分离抽象部分及具体实现部分

2、提高了系统的扩展性

3、符合开闭原则

4、符合合成复用原则

缺点:

1、增加了系统的理解与设计难度

2、需要正确的识别系统中两个独立变化的维度

代码链接

桥接模式

posted @ 2021-05-08 01:19  snail灬  阅读(225)  评论(0编辑  收藏  举报