赞
踩
桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。通过这种方式,桥接模式提供了更好的代码组织结构,可以减少类之间的继承关系,并提供更灵活的设计以应对变化。
桥接模式的核心思想是分离抽象和实现,使得二者可以独立地变化。在这种模式中,抽象部分指的是有高层的控制逻辑,而实现部分则是底层的具体操作。桥接模式通过提供一个桥接结构,使得抽象层和实现层不直接交互,而是通过桥接接口来进行通信,从而实现解耦。
假设有一个设备控制系统,有不同类型的设备(如电视和收音机)和多种遥控器类型。使用桥接模式,我们可以独立地处理遥控器和设备的变化。
定义设备接口(实现部分)和具体设备:
#include <iostream> // Implementor class Device { public: virtual bool isEnabled() = 0; virtual void enable() = 0; virtual void disable() = 0; virtual ~Device() {} }; // Concrete Implementor 1 class TV : public Device { bool on = false; public: bool isEnabled() override { return on; } void enable() override { on = true; std::cout << "TV is turned on.\n"; } void disable() override { on = false; std::cout << "TV is turned off.\n"; } }; // Concrete Implementor 2 class Radio : public Device { bool on = false; public: bool isEnabled() override { return on; } void enable() override { on = true; std::cout << "Radio is turned on.\n"; } void disable() override { on = false; std::cout << "Radio is turned off.\n"; } };
定义抽象和扩展抽象:
// Abstraction class RemoteControl { protected: Device* device; public: RemoteControl(Device* d) : device(d) {} virtual void togglePower() { if (device->isEnabled()) { device->disable(); } else { device->enable(); } } virtual ~RemoteControl() {} }; // Refined Abstraction class AdvancedRemoteControl : public RemoteControl { public: AdvancedRemoteControl(Device* d) : RemoteControl(d) {} void mute() { std::cout << "Device is muted.\n"; } };
客户端代码:
int main() { Device* tv = new TV(); RemoteControl* remote = new RemoteControl(tv); remote->togglePower(); // Turns TV on Device* radio = new Radio(); AdvancedRemoteControl* advancedRemote = new AdvancedRemoteControl(radio); advancedRemote->togglePower(); // Turns Radio on advancedRemote->mute(); // Mute the radio delete tv; delete radio; delete remote; delete advancedRemote; return 0; }
TV is turned on.
Radio is turned on.
Device is muted.
这个示例展示了如何使用桥接模式分离设备类型和遥控器的功能,使得对遥控器或设备类型的任何修改都不会影响到彼此。这种方式提高了代码的可维护性和扩展性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。