C++设计模式实现--桥接(Bridge)模式

一. 举例

N年前:

计算机最先出来时,软件和硬件是一绑在一起的,比如IBM出了一台电脑,上面有一个定制的系统,假如叫 IBM_Win,这个IBM_Win系统当然不能在HP电脑上运行,同样HP出的HP_Win系统也不能运行在IBM上。

这时如果有一家新公司Apple出了一台新电脑,那么这个公司也要开发自己的系统 Apple_Win,Apple_Linux。

其实,上面几家公司开发的软件和硬件在很多地方都有相似之处,如果每家公司都做自己的系统,这意味着资源和人员的极大浪费。

这时,无论出现新的系统,还是出现新的公司,对这种设计模式的修改都是很大的。

N年后:

Windows出现了,Linux出现了,软件和硬件终于分离了。这时的系统比如 Windows 既能在IBM机器上运行,也能在HP机器上运行了。

这时软件专注于软件,硬件专注于硬件。这也是推动计算机系统不断发展的原因(更加专注了嘛),也是推动更多公司出现的原因(成本更低了嘛)。

不管是出现了新硬件平台,还是出现新的OS,大家都能专注于自己领域。也就是外界的变化很大,但对这种模式冲击却很小。

代码实现:

[cpp] view
plain
copy

  1. //操作系统
  2. class OS
  3. {
  4. public:
  5. virtual void Run() {}
  6. };
  7. //Windows
  8. class WindowOS: public OS
  9. {
  10. public:
  11. void Run() { cout<<"运行 Windows"<<endl; }
  12. };
  13. //Linux
  14. class LinuxOS: public OS
  15. {
  16. public:
  17. void Run() { cout<<"运行 Linux"<<endl; }
  18. };
  19. //计算机
  20. class Computer
  21. {
  22. public:
  23. virtual void InstallOS(OS *os) {}
  24. };
  25. //IBM 计算机
  26. class IBMComputer: public Computer
  27. {
  28. public:
  29. void InstallOS(OS *os) { os->Run(); }
  30. };
  31. //HP 计算机
  32. class HPComputer: public Computer
  33. {
  34. public:
  35. void InstallOS(OS *os) { os->Run(); }
  36. };
  37. int main()
  38. {
  39. OS *os1 = new WindowOS();
  40. OS *os2 = new LinuxOS();
  41. Computer *computer1 = new IBMComputer();
  42. computer1->InstallOS(os1);
  43. computer1->InstallOS(os2);
  44. return 0;
  45. }

二. 桥接模式

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

换句话出,就是要把实现独立出来,让它们各自变化,而不会影响其它实现,这样可以降低耦合性。

为什么叫Bridge 模式,从上图中可以看出,它像一座桥,桥两边的系统相对独立,左边是抽象部分,右边是实现部分。

三. 组合、聚合复用原则

由上面两个种结构图的对比,我们可以引出一个原则:尽量使用组合、聚合,尽量不要使用类继承。

C++设计模式实现--桥接(Bridge)模式

时间: 2024-08-05 22:32:42

C++设计模式实现--桥接(Bridge)模式的相关文章

Java 实现桥接(Bridge)模式

类图: /** * 手机壳.套 * @author stone * */ public abstract class BaseCellphoneShell { public abstract void mapping();//对应匹配哪种手机 } /** * 手机,桥接了 手机壳BaseCellphoneShell * @author stone */ public abstract class BaseCellphone { private BaseCellphoneShell shell;

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

1.概述: 桥接模式:把抽象和行为分离开来,中间需要某个介质来连接抽象化和行为化.此模式的概述听起来非常像适配器模式,不要搞混了,虽然都是借用中间介质,但意义不同. 2.例子: 我们哪车子来打比方,比如:车有很多中类型(Bus,Jeep,taxi等),但每个车的引擎又不一样(有2000cc,2200cc)的:现在我们来造车,平常思维是根据车的配置来安装不同的引擎,而我们桥接模式的思维却是根据引擎来造车. 平常思维一: /** *造一个安装了引擎的车类接口 */ package com.msit.

漫谈设计模式(三):桥接(Bridge)模式 —— 将类功能、结构两层次分离

1.前言 类主要有两个层次,一个是功能层次,另一个是实现层次. 功能层次,一般应用于当前类不能满足多样化的业务需求,让子类去继承(具体)父类,添加加一些父类中没有的功能(一般是增加新的方法),这就属于因增加新功能而产生的层次结构. 实现层次,一般常见于子类去继承抽象类或接口,将抽象类或接口中的抽象方法重写,抽象类(接口)只声明了方法,而具体任务的分担需要子类去分担.相当于,子类只是将父类宣传出的口号.吹出的牛逼给落实了,将分配的任务给真正去做了,但它并没有增加新功能,只是实现父类的抽象方法,这就

23种设计模式(6)--Bridge模式

面向对象的设计原则:高内聚.低耦合 软件重构原则:小步快跑------抽取的思想(抽取函数.抽取类.抽取接口):对扩展开放.对修改封闭 设计模式分类如下: Bridge模式主要是解决多维度问题,什么意思呢?类似于n*m这个公式,n种抽象的接口,m种具体的实现,最多可以有n*m种组合方式. 下面这篇文章对Bridge模式讲解的通俗易懂,于是转了过来. 学习设计模式也有一段时间了,今天就把我整理的一篇课程和大家分享,有不妥之处欢迎指出. 生活中的一个例子: 就拿汽车在路上行驶的来说.即有小汽车又有公

图解Java设计模式之桥接模式

图解Java设计模式之桥接模式 手机操作问题 传统方案解决手机操作问题 传统方案解决手机操作问题分析 桥接模式(Bridge)-基本介绍 桥接模式解决手机操作问题 桥接模式在JDBC中的源码解析 桥接模式的注意事项和细节 桥接模式其它应用场景 手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如 :开机.关机.上网.打电话等等),如图 : 传统方案解决手机操作问题 传统方法对应的类图 传统方案解决手机操作问题分析 1)扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各

如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往文中插入几个表情的趋势了, 但是你真的插的姿势对了吗?这种事情不是随便插的,来来来,给你 见识下如何在适当的场景插入适当的表情以让读者感觉到易可赛艇, 本文以讲故事插表情为主,讲述桥接模式为辅,多图预警, 简书上排版可能有些问题,最佳排版可见: https://www.zybuluo.com/coder-pig/note

NET设计模式 第二部分 结构性模式(8):桥接模式(Bridge Pattern)

桥接模式(Bridge Pattern) ——.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图 将抽象部分与实现部分分离,使它们都可以独立的变化.[GOF <设计模式>] 结构图 图1 Bridge模式结构图 生活中的例子 桥接模式将抽象部分与它的实现分离

设计模式07: Bridge 桥接模式(结构型模式)

Bridge 桥接模式(结构型模式) 抽象与实现 抽象不应该依赖于实现细节,实现细节应该依赖于抽象. 抽象B稳定,实现细节b变化 问题在于如果抽象B由于固有的原因,本身并不稳定,也有可能变化,怎么办? 举例来说 假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的需求变化,比如坦克可能有多种不同的型号:T50,T75,T90…… 对于其中坦克设计,我们可能很容易设计出来一个Tank的抽象基类: /// <summary> /// 抽象Tan

设计模式之桥接模式(Bridge模式)

我想大家小时候都有用蜡笔画画的经历吧.红红绿绿的蜡笔一大盒,根据想象描绘出格式图样.而毛笔下的国画更是工笔写意,各展风采.而今天我们的故事从蜡笔与毛笔说起. 设想要绘制一幅图画,蓝天.白云.绿树.小鸟,如果画面尺寸很大,那么用蜡笔绘制就会遇到点麻烦.毕竟细细的蜡笔要涂出一片蓝天,是有些麻烦.如果有可能,最好有套大号蜡笔,粗粗的蜡笔很快能涂抹完成.至于色彩吗,最好每种颜色来支粗的,除了蓝天还有绿地呢.这样,如果一套12种颜色的蜡笔,我们需要两套24支,同种颜色的一粗一细.呵呵,画还没画,开始做梦了