桥接模式的核心目标是解耦抽象与实现以支持二者独立变化。它通过两套独立类体系、组合代替继承、运行时动态切换实现,避免类爆炸,强调正交演化而非单纯接口适配。

桥接模式(Bridge Pattern)在 C++ 中的核心目标是把抽象(Abstraction)和实现(Implementation)解耦,让两者可以独立变化。它不是为了解决“怎么连两个类”,而是为了解决“类爆炸”问题——比如有 3 种形状 × 4 种渲染方式,若用继承硬组合,就得写 12 个子类;用桥接,只需 3 个抽象类 + 4 个实现类,再通过组合动态绑定。
抽象层与实现层分离
桥接的关键是定义两套独立的类体系:一个负责高层逻辑(如 Shape、Window),另一个专注底层细节(如 Renderer、Platform)。抽象类中持有一个指向实现类的指针(通常是智能指针或裸指针),不继承实现类,只“用”它。
- 抽象基类(例如 Shape)声明业务接口(
draw()),内部保存std::unique_ptr<renderer></renderer> - 实现基类(例如 Renderer)声明底层操作(
renderCircle(float r)),由具体子类(OpenGLRenderer、VulkanRenderer)实现 - 子类(如
Circle)复用抽象基类,调用m_renderer->renderCircle(...),完全不知道底层怎么画
用组合代替继承,支持运行时切换
桥接允许你在不改抽象类的前提下,随时更换实现。比如一个窗口对象初始化时用 Win32Platform,运行中切换成 LinuxX11Platform,只要新旧实现都符合 Platform 接口即可。
- 构造时传入实现对象:
Circle circle(std::make_unique<openglrenderer>());</openglrenderer> - 提供
setRenderer(std::unique_ptr<renderer> r)</renderer>方法,支持动态替换 - 注意避免裸指针生命周期管理错误,优先用
std::unique_ptr或std::shared_ptr
虚析构函数与接口纯虚化
抽象基类必须有虚析构函数,否则通过基类指针 delete 派生对象会未定义行为;实现基类也应将核心方法设为纯虚,强制子类实现,避免空操作。
标签: c++桥接模式 结构型设计模式 linux 防火墙 c++ win 区别 red
还木有评论哦,快来抢沙发吧~