结构型(二) - 桥接模式

一、概念

桥接模式(Bridge Pattern):是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

另一种理解方式:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。

二、实现

这里用手机和处理器的关系来举个例子,手机牌子有:华为、小米、OPPO等,处理器有:麒麟、骁龙、天玑等。两者的变化维度是相对独立的,各自进行演进,但是不同的手机品牌和不同的处理器可以组合形成不同的产品。因此,我们用桥接的方式把他们连接起来。
1、处理器接口及实现

public interface Processor {
    void processorRun();
}
public class SnapdragonProcessor implements Processor{
    @Override
    public void processorRun() {
      System.out.println("骁龙处理器开始运行");
    }
}
public class KirinProcessor implements Processor{
    @Override
    public void processorRun() {
      System.out.println("麒麟处理器开始运行");
    }
}

2、手机功能实现

public abstract class MobilePhone {
    private Processor processor;
    public MobilePhone(Processor processor) {
        this.processor = processor;
    }

    protected void run() {
        System.out.println("开机");
        processor.processorRun();
    }
}
public class HuaweiPhone extends MobilePhone {
    public HuaweiPhone(Processor processor){
        super(processor);
    }

    @Override
    protected void run() {
        super.run();
        System.out.println("华为手机运行");
    }
}
public class XiaomiPhone extends MobilePhone {
    public XiaomiPhone (Processor processor){
        super(processor);
    }

    @Override
    protected void run() {
        super.run();
        System.out.println("小米手机运行");
    }
}

3、验证实现

public class Client {
    public static void main(String[] args) {
        KirinProcessor kirinProcessor = new KirinProcessor();
        HuaweiPhone huaweiPhone = new HuaweiPhone(kirinProcessor);
        huaweiPhone.run();

        System.out.println("----------------------");
        SnapdragonProcessor snapdragonProcessor = new SnapdragonProcessor();
        XiaomiPhone xiaomiPhone = new XiaomiPhone(snapdragonProcessor);
        xiaomiPhone.run();
    }
}

4、结果
桥接运行结果.png