3.2 桥接模式(Bridge)定义

桥接模式(Bridge)定义

桥接模式是一种结构型设计模式,它的核心目的是将抽象与实现解耦,使得两者可以独立地变化。在桥接模式中,抽象部分指的是某个类的接口,而实现部分则是这个接口的具体实现。这样,你可以在不改变抽象接口的前提下,改变实现部分。

桥接模式的应用场景

桥接模式适用于以下场景:

  1. 当你想避免一个抽象和它的实现之间的永久绑定时。例如,当实现必须可以在运行时切换或选择时。
  2. 类的抽象以及它们的实现都应该通过生成子类的方式来扩展。这时桥接模式让你可以对各自独立地进行扩展。
  3. 变化的抽象和实现应该能够独立地进行,这样一个客户端代码就可以对抽象进行操作,而不用关心实现细节。

代码示例

下面是一个简单的桥接模式的例子,其中包括一个设备(Device)接口和两种类型的设备实现(Radio和Tv),以及一个远程控制器(Remote)的抽象和两种不同的远程控制器实现(BasicRemote和AdvancedRemote)。

设备接口(Implementation)

// 设备接口
public interface Device {
    boolean isEnabled();
    void enable();
    void disable();
    int getVolume();
    void setVolume(int volume);
    int getChannel();
    void setChannel(int channel);
}

具体设备实现

// 电视实现
public class Tv implements Device {
    private boolean on = false;
    private int volume = 30;
    private int channel = 1;

    @Override
    public boolean isEnabled() {
        return on;
    }

    @Override
    public void enable() {
        on = true;
    }

    @Override
    public void disable() {
        on = false;
    }

    @Override
    public int getVolume() {
        return volume;
    }

    @Override
    public void setVolume(int volume) {
        this.volume = volume;
    }

    @Override
    public int getChannel() {
        return channel;
    }

    @Override
    public void setChannel(int channel) {
        this.channel = channel;
    }
}

// 收音机实现
public class Radio implements Device {
    // 实现与Tv类似
}

抽象部分(Abstraction)

// 远程控制器抽象
public abstract class Remote {
    protected Device device;

    public Remote(Device device) {
        this.device = device;
    }

    public void togglePower() {
        if (device.isEnabled()) {
            device.disable();
        } else {
            device.enable();
        }
    }

    // 其他功能...
}

具体的远程控制器实现

// 基础遥控器
public class BasicRemote extends Remote {
    public BasicRemote(Device device) {
        super(device);
    }

    public void volumeDown() {
        device.setVolume(device.getVolume() - 10);
    }

    public void volumeUp() {
        device.setVolume(device.getVolume() + 10);
    }

    public void channelDown() {
        device.setChannel(device.getChannel() - 1);
    }

    public void channelUp() {
        device.setChannel(device.getChannel() + 1);
    }
}

// 高级遥控器
public class AdvancedRemote extends BasicRemote {
    public AdvancedRemote(Device device) {
        super(device);
    }

    public void mute() {
        device.setVolume(0);
    }
}

客户端代码

public class Demo {
    public static void main(String[] args) {
        Device tv = new Tv();
        Remote basicRemote = new BasicRemote(tv);
        basicRemote.togglePower();

        Device radio = new Radio();
        Remote advancedRemote = new AdvancedRemote(radio);
        advancedRemote.togglePower();
        ((AdvancedRemote) advancedRemote).mute();
    }
}

注意事项

  • 正确理解抽象和实现:在桥接模式中,抽象并不是指抽象类或接口,而是指抽象的概念,即一个类的高层控制逻辑。实现指的是抽象的具体实现细节。
  • 独立变化:桥接模式的目的是让抽象和实现可以独立变化,不要让它们之间的变化相互影响。
  • 不要过度使用:如果系统中的抽象和实现之间的关系很稳定,或者不太可能发生变化,那么引入桥接模式可能会导致不必要的复杂性。使用桥接模式时应当考虑是否真的需要这种级别的抽象。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值