C++设计模式中的桥模式是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责
千家信息网最后更新 2025年11月07日C++设计模式中的桥模式是什么
这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
单一职责模式:
在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。
典型模式
Decorator
Bridge
Bridge
动机(Motivation)
由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。
如何应对这种"多维度的变化"?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?
模式定义
将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。
结构

要点总结
Bridge模式使用"对象间的组合关系"解耦了抽象和实现之间固 有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自纬度的变化,即"子类化"它们。
Bridge模式有时候类似于多继承方案,但是多继承方案往往违背 单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
Bridge模式的应用一般在"两个非常强的变化维度",有时一个 类也有多于两个的变化维度,这时可以使用Bridge的扩展模式。
cpp
class Messager {public: virtual void Login(string username, string password) = 0; virtual void SendMessage(string message) = 0; virtual void SendPicture(Image image) = 0; virtual void PlaySound() = 0; virtual void DrawShape() = 0; virtual void WriteText() = 0; virtual void Connect() = 0; virtual ~Messager() {}};//平台实现class PCMessagerBase : public Messager {public: virtual void PlaySound() { //********** } virtual void DrawShape() { //********** } virtual void WriteText() { //********** } virtual void Connect() { //********** }};class MobileMessagerBase : public Messager {public: virtual void PlaySound() { //========== } virtual void DrawShape() { //========== } virtual void WriteText() { //========== } virtual void Connect() { //========== }};//业务抽象class PCMessagerLite : public PCMessagerBase {public: virtual void Login(string username, string password) { PCMessagerBase::Connect(); //........ } virtual void SendMessage(string message) { PCMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image) { PCMessagerBase::DrawShape(); //........ }};class PCMessagerPerfect : public PCMessagerBase {public: virtual void Login(string username, string password) { PCMessagerBase::PlaySound(); //******** PCMessagerBase::Connect(); //........ } virtual void SendMessage(string message) { PCMessagerBase::PlaySound(); //******** PCMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image) { PCMessagerBase::PlaySound(); //******** PCMessagerBase::DrawShape(); //........ }};class MobileMessagerLite : public MobileMessagerBase {public: virtual void Login(string username, string password) { MobileMessagerBase::Connect(); //........ } virtual void SendMessage(string message) { MobileMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image) { MobileMessagerBase::DrawShape(); //........ }};class MobileMessagerPerfect : public MobileMessagerBase {public: virtual void Login(string username, string password) { MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::Connect(); //........ } virtual void SendMessage(string message) { MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image) { MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::DrawShape(); //........ }};void Process() { //编译时装配 Messager* m = new MobileMessagerPerfect();}class Messager {protected: MessagerImp* messagerImp;//...public: virtual void Login(string username, string password) = 0; virtual void SendMessage(string message) = 0; virtual void SendPicture(Image image) = 0; virtual ~Messager() {}};class MessagerImp {public: virtual void PlaySound() = 0; virtual void DrawShape() = 0; virtual void WriteText() = 0; virtual void Connect() = 0; virtual MessagerImp() {}};//平台实现 nclass PCMessagerImp : public MessagerImp {public: virtual void PlaySound() { //********** } virtual void DrawShape() { //********** } virtual void WriteText() { //********** } virtual void Connect() { //********** }};class MobileMessagerImp : public MessagerImp {public: virtual void PlaySound() { //========== } virtual void DrawShape() { //========== } virtual void WriteText() { //========== } virtual void Connect() { //========== }};//业务抽象 m//类的数目:1+n+mclass MessagerLite :public Messager {public: virtual void Login(string username, string password) { messagerImp->Connect(); //........ } virtual void SendMessage(string message) { messagerImp->WriteText(); //........ } virtual void SendPicture(Image image) { messagerImp->DrawShape(); //........ }};class MessagerPerfect :public Messager {public: virtual void Login(string username, string password) { messagerImp->PlaySound(); //******** messagerImp->Connect(); //........ } virtual void SendMessage(string message) { messagerImp->PlaySound(); //******** messagerImp->WriteText(); //........ } virtual void SendPicture(Image image) { messagerImp->PlaySound(); //******** messagerImp->DrawShape(); //........ }};void Process() { //运行时装配 MessagerImp* mImp = new PCMessagerImp(); Messager* m = new Messager(mImp);}感谢你能够认真阅读完这篇文章,希望小编分享的"C++设计模式中的桥模式是什么"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
模式
变化
两个
篇文章
维度
设计
业务
平台
方案
设计模式
C++
同时
多个
子类
对象
时装
类型
纬度
职责
责任
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
静态路由网络安全保密性高吗
长宁区品牌软件开发质量保障
守望先锋断开服务器
相关网络安全主题基金
菠菜专用高防服务器
南糖服务器
云南游戏服务器托管云主机
200数据库dbms
mongodb切换数据库目录
做项目的软件开发
百思教育软件开发一年多少钱
软件开发毕业生找工作经验
服务器注册指令
原油白银期货软件开发
新浪网络技术公司招聘
ncbi是一个数据库吗
软件开发v模型的价值
db2怎么连接新建数据库
临沂拓普网络 软件开发
有没有个人家用游戏托管服务器
医鹿服务器奔溃
计算机三级数据库技术报名
互联网凝聚中国科技创新
数据中心服务器互联
服务器光模块供应公司
成华区西尔网络技术
和县网络安全排名
南山正规的网络安全运维
云服务器备份方案
集思软件开发深圳有限公司照片