【设计模式】桥接模式

桥接模式可以用开关和电气的关系来表示,开关属于抽象层,主要负责做开和关的操作,但是具体怎么开启和关闭是由电器决定的。电器属于实现层,比如风扇,灯泡,各自实现自己的开关逻辑。这样做的好处是开关和电器都可以独立升级,互不影响。当抽象和实现都可能变化时,桥接模式提供灵活扩展性!

案例代码:遥控器与设备

  1. 实现层接口(设备)
// 设备接口(实现层)
interface Device {
    void turnOn();
    void turnOff();
    void setVolume(int volume);
}

// 电视实现
class TV implements Device {
    public void turnOn() { System.out.println("TV打开"); }
    public void turnOff() { System.out.println("TV关闭"); }
    public void setVolume(int vol) { System.out.println("TV音量设置到 " + vol); }
}

// 收音机实现
class Radio implements Device {
    public void turnOn() { System.out.println("Radio打开"); }
    public void turnOff() { System.out.println("Radio关闭"); }
    public void setVolume(int vol) { System.out.println("Radio音量设置到 " + vol); }
}
  1. 抽象层(遥控器)
// 抽象遥控器(抽象层)
abstract class RemoteControl {
    protected Device device;  // 组合实现层对象

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

    abstract void power(); // 抽象方法:开关操作
    public void volumeUp() { device.setVolume(10); } // 默认调音量方法
}

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

    public void power() {
        System.out.print("基础遥控器:");
        device.turnOn();
    }
}

// 高级遥控器(可静音)
class AdvancedRemote extends RemoteControl {
    public AdvancedRemote(Device device) { super(device); }

    public void power() {
        System.out.print("高级遥控器:");
        device.turnOn();
    }

    public void mute() { device.setVolume(0); } // 新增功能
}
  1. 使用桥接模式
public class BridgeDemo {
    public static void main(String[] args) {
        // 创建设备(实现层)
        Device tv = new TV();
        Device radio = new Radio();

        // 创建遥控器(抽象层),组合不同设备
        RemoteControl basicForTV = new BasicRemote(tv);
        RemoteControl advancedForRadio = new AdvancedRemote(radio);

        basicForTV.power();       // 输出:基础遥控器:TV打开
        advancedForRadio.power(); // 输出:高级遥控器:Radio打开
        ((AdvancedRemote)advancedForRadio).mute(); // 静音
    }
}

应用场景案例:图形与渲染引擎
场景描述

  • 抽象层:图形(如圆形、矩形)
  • 实现层:渲染引擎(如 OpenGL、Vulkan)
    图形和渲染方式可以自由组合,新增图形或引擎无需修改对方代码。
    代码实现
// 实现层:渲染引擎
interface RenderEngine {
    void renderShape(String shape);
}

class OpenGL implements RenderEngine {
    public void renderShape(String shape) {
        System.out.println("OpenGL 渲染 " + shape);
    }
}

class Vulkan implements RenderEngine {
    public void renderShape(String shape) {
        System.out.println("Vulkan 渲染 " + shape);
    }
}

// 抽象层:图形
abstract class Shape {
    protected RenderEngine renderer;

    public Shape(RenderEngine renderer) {
        this.renderer = renderer;
    }

    abstract void draw();
}

class Circle extends Shape {
    public Circle(RenderEngine renderer) { super(renderer); }

    public void draw() {
        renderer.renderShape("圆形");
    }
}

class Rectangle extends Shape {
    public Rectangle(RenderEngine renderer) { super(renderer); }

    public void draw() {
        renderer.renderShape("矩形");
    }
}

// 使用示例
public class GraphicsDemo {
    public static void main(String[] args) {
        RenderEngine opengl = new OpenGL();
        RenderEngine vulkan = new Vulkan();

        Shape circle = new Circle(opengl);
        Shape rect = new Rectangle(vulkan);

        circle.draw(); // 输出:OpenGL 渲染 圆形
        rect.draw();   // 输出:Vulkan 渲染 矩形
    }
}

桥接模式应用场景还包括

  1. 支付系统:支付方式(支付宝/微信)与支付渠道(国内/国际)解耦。
  2. 数据库连接:程序接口(JDBC)与具体数据库驱动(MySQL/Oracle)分离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云徒川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值