目录

基本概念

代码与实例


基本概念

组合/聚合的好处:优先使用对象的组合/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类的继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

桥接模式(Bridge),将抽象部分与实现部分分离,使它们都可以独立的变化。

桥接模式的核心意图就是把这些实现对立出来,让它们各自变化。这就使得每一种实现的变化不会影响其他实习。

UML图如下(来源大话设计模式)

代码与实例

程序运行截图如下:

源码如下:

Head.h

#ifndef HEAD_H
#define HEAD_H#include <list>
#include <string>
#include <iostream>
using namespace std;//手机软件
class HandSetSoft{public:virtual void run();virtual ~HandSetSoft();protected:HandSetSoft();HandSetSoft(HandSetSoft &h);HandSetSoft &operator = (HandSetSoft &t);string m_name;
};//手机游戏
class HandSetGame : public HandSetSoft{public:HandSetGame(const string &name);~HandSetGame();void run();
};//手机通讯录
class HandSetAddressList: public HandSetSoft{public:HandSetAddressList(const string &name);~HandSetAddressList();void run();
};//手机品牌
class HandSetBrand{public:void addHandSetSoft(HandSetSoft *h);virtual void run();virtual ~HandSetBrand();protected:HandSetBrand();HandSetBrand(HandSetBrand &h);HandSetBrand &operator = (HandSetBrand &t);list<HandSetSoft*> m_soft;
};//手机品牌N
class HandSetBrandN: public HandSetBrand{public:~HandSetBrandN();void run();
};//手机品牌M
class HandSetBrandM: public HandSetBrand{public:~HandSetBrandM();void run();
};#endif

Head.cpp

#include "Head.h"void HandSetSoft::run()
{}HandSetSoft::HandSetSoft()
{}HandSetSoft::HandSetSoft(HandSetSoft &h)
{}HandSetSoft::~HandSetSoft()
{cout << "HandSetSoft::~HandSetSoft()" << endl;
}HandSetSoft& HandSetSoft::operator=(HandSetSoft &t)
{return HandSetSoft();
}HandSetGame::HandSetGame(const string &name)
{m_name = name;
}HandSetGame::~HandSetGame()
{cout << "HandSetGame::~HandSetGame()" << endl;
}void HandSetGame::run()
{cout << "运行手机游戏 ---- " << m_name << endl;
}HandSetAddressList::HandSetAddressList(const string &name)
{m_name = name;
}HandSetAddressList::~HandSetAddressList()
{cout << "HandSetAddressList::~HandSetAddressList()" << endl;
}void HandSetAddressList::run()
{cout << "运行手机通讯录 ---- " << m_name << endl;
}void HandSetBrand::addHandSetSoft(HandSetSoft *h)
{m_soft.push_back(h);
}void HandSetBrand::run()
{}HandSetBrand::HandSetBrand()
{}HandSetBrand::HandSetBrand(HandSetBrand &h)
{}HandSetBrand::~HandSetBrand()
{cout << "HandSetBrand::~HandSetBrand()" << endl;
}HandSetBrand & HandSetBrand::operator=(HandSetBrand &t)
{return HandSetBrand();
}HandSetBrandN::~HandSetBrandN()
{cout << "HandSetBrandN::~HandSetBrandN()" << endl;for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){delete (*i);}m_soft.clear();
}void HandSetBrandN::run()
{for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){(*i)->run();}
}HandSetBrandM::~HandSetBrandM()
{cout << "HandSetBrandM::~HandSetBrandM()" << endl;for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){delete (*i);}m_soft.clear();
}void HandSetBrandM::run()
{for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){(*i)->run();}
}

main.cpp

#include "Head.h"int main(int *argc, int *argv){HandSetBrand *band1 = new HandSetBrandN;band1->addHandSetSoft(new HandSetGame("王者荣耀"));band1->addHandSetSoft(new HandSetGame("吃鸡"));band1->addHandSetSoft(new HandSetGame("赛尔号"));band1->addHandSetSoft(new HandSetAddressList("流氓公司出的"));band1->addHandSetSoft(new HandSetAddressList("好用的软件"));band1->run();delete band1;cout << endl << "---------------华丽的分割线---------------" << endl << endl;HandSetBrand *band2 = new HandSetBrandM;band2->addHandSetSoft(new HandSetGame("QQ飞车"));band2->addHandSetSoft(new HandSetAddressList("流氓公司的"));band2->run();delete band2;getchar();return 0;
}

C++设计模式-桥接模式相关推荐

  1. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  2. 【学习笔记】ABAP OOD设计模式 - 桥接模式

    ABAP OOD设计模式 - 桥接模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 桥接模式又称为桥梁模式,在程序开发中,采用不同的维度分解一系列对象,然后采用组 ...

  3. 跟着ZHONGHuan学习设计模式--桥接模式

    转载请注明出处! ! !http://blog.csdn.net/zhonghuan1992 全部配套代码均在github上:https://github.com/ZHONGHuanGit/Desig ...

  4. 2.设计模式-桥接模式

    文章目录 一.使用场景 二.实现方法 三.优势与劣势 四.经典案例 本文笔记来自于: 狂神的设计模式 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构模型,又称为柄体( ...

  5. 设计模式--桥接模式(Bridge)

    设计模式–桥接模式(Bridge) 1.定义 桥接模式:将抽象部分与它的实现部分分离,使它们可以独立地变化. 2.实例 设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图 ...

  6. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

  7. 23种设计模式——桥接模式

    文章目录 23种设计模式--桥接模式 1.桥接模式概述 2.桥接模式结构 3.桥接模式的实现 4.桥接模式的注意事项和细节 23种设计模式--桥接模式 1.桥接模式概述 桥接模式介绍 桥接(Bridg ...

  8. 设计模式——桥接模式实验报告

    目录 设计模式--桥接模式实验报告 一.实验题目 二.所用模式结构视图 三.本实例类图 四.实例实现代码 1.抽象消息类 2.普通消息类 3.加急消息类 4.特急消息类 5.实现发送消息的统一接口: ...

  9. Java设计模式-桥接模式 理论代码相结合

    继Java设计模式-装饰器模式后的桥接模式出来了,感兴趣的话,就来看一看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢 ...

  10. 结合JDK源码看设计模式——桥接模式

    前言: 在我们还没学习框架之前,肯定都学过JDBC.百度百科对JDBC是这样介绍的[JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Jav ...

最新文章

  1. nginx配置静态资源html,通过nginx服务器访问静态资源(示例代码)
  2. ET001 不可不掌握的 Logstash 使用技巧
  3. c语言字符串去重简单,C语言实现简单飞机大战
  4. 【剑指offer】十九,数组中出现次数超过一半的数字
  5. qt获取场景的缩略图
  6. php base64图片大小,php 图片 base64编码相互转换
  7. MYSQL查询重复记录的方法
  8. net.sf.json与fastjson两种jar包的使用
  9. Adobe Premiere基础-常用的视频特效(裁剪,黑白,剪辑速度,镜像,镜头光晕)(十五)
  10. 彻底解决Ubuntu18.04搜狗拼音输入法问题---支持Pycharm、WPS
  11. ABOUTCG发布Maya 刚体特效完全教程
  12. 2007年9-11月
  13. 封装系统之新手操作版
  14. sublime匹配汉字
  15. 机房部署以及机房环境
  16. PT100高精度测温电路 AD623+REF3030(转)
  17. 开机后自动执行bat文件中的python程序,自动登录软件进行功能配置
  18. wildfly常用配置说明
  19. Kafka系列之:kafka命令详细总结
  20. mti杂波抑制仿真 matlab,杂波抑制

热门文章

  1. 某个知名技术论坛用户名和密码泄露(第一部分)
  2. 万字好文 | 数字化转型之道——数据治理体系能力提升
  3. pycharm中文包:环境配置与编辑器使用(内附中文包地址)
  4. 程序员编程能力和年龄的关系
  5. 谁说程序员赚得比医生少?网友:我一年的收入医生一辈子都赚不到
  6. HTML5设备API 大批美女等你来摇一摇
  7. 台式计算机内存是什么意思,电脑提示计算机内存不足是什么意思
  8. mysql双向同步读写_mysql数据双向同步
  9. linux 监听日志_Linux系统取证概述
  10. sqlserver两个日期之间的年数_SQL语句计算两个日期之间有多少个工作日的方法