c++如何实现桥接设计模式_c++解耦抽象与实现

技术百科 穿越時空 发布时间:2025-12-30 浏览:
桥接模式通过组合将抽象与实现分离,使其独立扩展。定义Abstraction(遥控器)持有Implementor(设备)指针,各自形成类层级:Device为实现基类,TV和Radio提供具体实现;Remote为抽象基类,BasicRemote和EnhancedRemote扩展高层行为。运行时动态绑定,如BasicRemote控制TV,EnhancedRemote控制Radio,新增设备或遥控器无需修改对方代码,符合开闭原则。

桥接模式用于将抽象部分与它的实现部分分离,使它们可以独立变化。在C++中,这通常通过类层次结构和指针或引用实现解耦。关键在于用组合代替继承,把可能变化的实现细节提取到另一个类体系中。

核心结构:抽象与实现分离

定义两个独立的类层级:一个是抽象(Abstraction),它包含一个指向实现(Implementor)的指针;另一个是实现基类及其具体实现。这样,修改实现不会影响抽象接口。

  • Abstraction 类持有 Implementor 接口的指针,调用其方法
  • Implementor 是实现接口,定义底层操作
  • ConcreteImplementor 提供具体实现
  • RefinedAbstraction 可扩展高层行为而不影响实现

代码示例:设备控制与远程操作

假设我们有不同设备(电视、收音机)和不同类型的遥控器(基础、静音)。设备类型和遥控方式应能独立扩展。

#include 

// 实现接口:设备 class Device { public: virtual void turnOn() = 0; virtual void turnOff() = 0; virtual ~Device() = default; };

// 具体实现:电视 class TV : public Device { public: void turnOn() override { std::cout << "TV is turning on\n"; } void turnOff() override { std::cout << "TV is turning off\n"; } };

// 具体实现:收音机 class Radio : public Device { public: void turnOn() override { std::cout << "Radio is turning on\n"; } void turnOff() override { std::cout << "Radio is turning off\n"; } };

// 抽象:遥控器 class Remote { protected: Device device; public: explicit Remote(Device d) : device(d) {} virtual void power() = 0; virtual ~Remote() = default; };

// 具体抽象:基础遥控 class BasicRemote : public Remote { public: using Remote::Remote; void power() override { device->turnOn(); } };

// 扩展抽象:带关机功能的遥控 class EnhancedRemote : public Remote { public: using Remote::Remote; void power() override { if (/ some condition / true) { device->turnOn(); } else { device->turnOff(); } } void mute() { std::cout << "Muting device...\n"; } };

使用方式:运行时绑定

可以在程序运行时动态组合不同的抽象和实现,无需重新编译。

int main() {
    TV tv;
    Radio radio;
BasicRemote basicTv(&tv);
EnhancedRemote enhancedRadio(&radio);

basicTv.power();           // 输出: TV is turning on
enhancedRadio.power();     // 输出: Radio is turning on
enhancedRadio.mute();      // 输出: Muting device...

return 0;

}

通过这种方式,新增设备只需继承 Device,新增遥控器类型只需扩展 Remote。两者互不影响,符合开闭原则。基本上就这些,不复杂但容易忽略设计初衷。


# ai  # 而不  # 只需  # 绑定  # 关键在于  # 使其  # 不同类型  # c++  # 指针  # stream  # 接口  # 继承  # asic  # ios  # 使它  # 或引用  # 桥接  # 开闭 


相关栏目: <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 AI推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 SEO优化<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 技术百科<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 谷歌推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 百度推广<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 网络营销<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 案例网站<?muma echo $count; ?> 】 <?muma $count = M('archives')->where(['typeid'=>$field['id']])->count(); ?> 【 精选文章<?muma echo $count; ?>

相关推荐

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:4006964355


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部