桥接模式-解决多维度变化的问题

桥接模式定义

将抽象和实现放在两个不同的类层次结构中,使得两者可以独立变化。

桥接模式结构图

在这里插入图片描述

桥接模式角色介绍

抽象化角色:Abstraction,用于定义抽象类的接口,同时定义了一个Implementor(实现化接口)类型的对象。

扩充抽象类角色:RefinedAbstraction,继承抽象类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。

实现化接口角色:Implementor,一个接口或者抽象类,定义实现化类层次结构行为。

具体实现类角色:ConcreteImplementor,实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现。

桥接模式结构代码

实现化角色:

public interface Implementor {
    void operationImp();
}

具体实现类角色:

public class ConcreteImplementor implements Implementor {
    public void operationImp() {
        System.out.println("我是实现化层次结构的功能");
    }
}

抽象化角色:

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

    public abstract void operation();

    public abstract void doSometing();
}

扩充抽象类角色:

public class RefinedAbstraction extends Abstraction {

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

    public void operation() {
        implementor.operationImp();
    }

    public void doSometing() {
        System.out.println("doSometiongnvnvnnnnvnnv");
    }
}

桥接模式运行机制

先说一下类的多维度变化,类的多维度也就是类具有的多个属性,每个属性的差异都通过子类继承的方式实现,各个属性之间就会相互干扰,不需要变化的属性要随变化的属性扩张到各个子类中。

桥接模式就是把类的多个属性按照属性维度进行拆分到不同的类中,每个类只负责一个属性变化。选择其中一个属性作为抽象类层次结构,其它作为实现类层次结构。抽象类层次结构与实现类层次结构属于聚合关联关系。

那拆分过程谁作为抽象类层次结构、谁作为实现类层次结构呢?我总结了两个原则:
1、把直接与客户端对接的属性作为抽象类层次结构,间接对接的属性作为实现类层次结构。比如客户端使用遥控器操作电视,遥控器种类不同,电视种类也不同,但客户端直接操作的是遥控器,此时把遥控器这个类层次结构作为抽象层次结构,把电视机作为实现类层次结构。
2、把差异性数量最少的属性作为抽象类层次结构。比如客户选择咖啡的种类和咖啡杯子的型号,明显杯子型号这个属性差异性数量少于咖啡种类这个属性差异性。所以此时把咖啡杯子的型号作为抽象类层次结构,把咖啡种类作为实现类层次结构。

桥接模式解决的核心问题

桥接模式解决的是类属性多维度变化问题,把类的抽象层次结构和类的实现层级结构解耦,这个解耦主要指的是子类继承层面,通过组合的形式,实现各个属性类可以独立变化。

猜你喜欢

转载自blog.csdn.net/javaloveiphone/article/details/85226795