设计模式C++描述----09.桥接(Bridge)模式
一. 举例
N年前:
计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上。

这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux。
其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费。
这时,无论出现新的系统,还是出现新的公司,对这种设计模式的修改都是很大的。
N年后:
Windows出现了,Linux出现了,软件和硬件终于分离了。这时的系统比如 Windows 既能在IBM机器上运行,也能在HP机器上运行了。

这时软件专注于软件,硬件专注于硬件。这也是推动计算机系统不断发展的原因(更加专注了嘛),也是推动更多公司出现的原因(成本更低了嘛)。
不管是出现了新硬件平台,还是出现新的OS,大家都能专注于自己领域。也就是外界的变化很大,但对这种模式冲击却很小。
代码实现:
- //操作系统
- class OS
- {
- public:
- virtual void Run() {}
- };
- //Windows
- class WindowOS: public OS
- {
- public:
- void Run() { cout<<"运行 Windows"<<endl; }
- };
- //Linux
- class LinuxOS: public OS
- {
- public:
- void Run() { cout<<"运行 Linux"<<endl; }
- };
- //计算机
- class Computer
- {
- public:
- virtual void InstallOS(OS *os) {}
- };
- //IBM 计算机
- class IBMComputer: public Computer
- {
- public:
- void InstallOS(OS *os) { os->Run(); }
- };
- //HP 计算机
- class HPComputer: public Computer
- {
- public:
- void InstallOS(OS *os) { os->Run(); }
- };
- int main()
- {
- OS *os1 = new WindowOS();
- OS *os2 = new LinuxOS();
- Computer *computer1 = new IBMComputer();
- computer1->InstallOS(os1);
- computer1->InstallOS(os2);
- return 0;
- }
二. 桥接模式
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
换句话出,就是要把实现独立出来,让它们各自变化,而不会影响其它实现,这样可以降低耦合性。
为什么叫Bridge 模式,从上图中可以看出,它像一座桥,桥两边的系统相对独立,左边是抽象部分,右边是实现部分。
三. 组合、聚合复用原则


由上面两个种结构图的对比,我们可以引出一个原则:尽量使用组合、聚合,尽量不要使用类继承。
设计模式C++描述----09.桥接(Bridge)模式的更多相关文章
- 设计模式初探-桥接(Bridge)模式
桥接(Bridge)模式,又称Handle/Body模式,属于对象结构型模式.用于将抽象部分与它的实现部分分离,使它们都可以独立地变化.比如常见的电脑窗口界面,不同的操作系统其窗口界面绘制的原理肯定不 ...
- Java 实现桥接(Bridge)模式
类图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamp3d21scDQ1Ng==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- 设计模式之Birdge(桥接)模式
1.出现原因 1.同一个类型,有两个变化的维度(两个维度的抽象:一个抽象部分的抽象,一个实现部分的抽象) 2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得同一类型可以轻松地沿着两个方向变化 ...
- 《图解设计模式》读书笔记4-1 Bridge模式
目录 概念 代码 角色 类图 想法 概念 Bridge模式即桥接模式.顾名思义,这个模式的作用是将类的功能层次结构和类的实现层次结构连接起来. 功能层次结构 Something -SomethingG ...
- Java设计模式---桥接Bridge模式
参考于 : 大话设计模式 马士兵设计模式视频 写在开头: 桥接模式主要用于一件事物分成了两个维度,进行排列组合,比如礼物,可以分成优雅的礼物(抽象),花(具体),排列组合优雅的花! 1.为什么使用桥接 ...
- 漫谈设计模式(三):桥接(Bridge)模式 —— 将类功能、结构两层次分离
1.前言 类主要有两个层次,一个是功能层次,另一个是实现层次. 功能层次,一般应用于当前类不能满足多样化的业务需求,让子类去继承(具体)父类,添加加一些父类中没有的功能(一般是增加新的方法),这就属于 ...
- 设计模式--桥接(Bridge)模式
1.概述: 桥接模式:把抽象和行为分离开来,中间需要某个介质来连接抽象化和行为化.此模式的概述听起来非常像适配器模式,不要搞混了,虽然都是借用中间介质,但意义不同.最典型的桥接模式就是:JDBC.通过 ...
- 桥接(Bridge)模式
桥接模式又称为柄体模式或接口模式.桥接模式的用意就是"将抽象化与实现化解耦,使得二者可以独立变化". 抽象化: 存在于多个实体中的共同的概念性联系,就是抽象化.作为一个过程,抽象化 ...
- 设计模式C++描述----22.访问者(Visitor)模式
一. 访问者模式 定义:表示一个作用于某对象结构中的各元素的操作.它你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 结构如下: 二. 举例 假设有一项科学实验,是用来对比两种种子在不同环 ...
随机推荐
- Spring MVC-从零开始-view-向页面传递data(ModelAndView)
1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- Spring 梳理-MVC-前端控制器DispatchServlet及URL请求处理过程
大多数基于java的web框架,都有前端控制器 spring mvc请求过程 1. 请求会首先发送到DispatchServlet,这是spring的前置Servlet,它会接收请求并转发给sprin ...
- 清空div中的数据
//清空div $("#divinput").val(""); $("#divimg").val(""); $(&quo ...
- linux常用开发命令总结
linux常用命令 文件操作命令 1. cd 目录名/目录名 切换目录 cd .. 切换到上一级目录 (change dictionary) Ctrl+C强制退出命令行,回到上一级 2.ls ...
- SpringBootSecurity学习(13)前后端分离版之JWT
JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和c ...
- Linux端口占用情况查看
1,查看8010端口是否被占用[root@cloud ~]# netstat -an|grep 8010tcp 0 0 0.0.0.0:8010 0.0.0.0:* LISTEN 2,查看8010是被 ...
- nslookup的基本使用
nslookup的基本使用 nslookup:name server lookup 用来查询DNS的. 1:安装nslookup命令 [root@localhost ~]# yum install b ...
- SpringBoot进阶教程(六十二)整合Kafka
在上一篇文章<Linux安装Kafka>中,已经介绍了如何在Linux安装Kafka,以及Kafka的启动/关闭和创建发话题并产生消息和消费消息.这篇文章就介绍介绍SpringBoot整合 ...
- CSDN VIP如何添加引流自定义栏目
几个月前我也开始在csdn上开了博客,一来给自己加几个少的可怜的流量,再者,让公众号的原创文章获得更多的曝光,让有需要的同学看到. 写过csdn博客的同学都知道,默认只有打赏c币功能:也没有专门广告位 ...
- python编程基础之三十二
成员方法:成员方法就是一个函数,只是作用域在类内,并且第一个参数必须是self,self代表当前对象, class Dog(object): def bark(self): #成员方法,第一个参数必须 ...