c++涉及模式 桥接模式(bridge Pattern)

c++涉及模式 桥接模式(bridge Pattern)
考虑这样一个问题:
需要获得一个图形,这个图形可以是圆形,可以是正方形,可以使长方形其颜色可以是蓝色可以是红色可以是绿色,如果这种情况下将设计写死,那么可以
看到有3*3=9 个类,但是图形和颜色更多呢?那么成为一个基本不能完成的任务,那么在这种情况下我们就需一种叫做桥接的设计模式,它的原理同样是
通过虚函数进行解耦合,实现方式 图形抽象类通过一个输入颜色抽象类的指针(依赖)来代表颜色,然后通过保存在一个聚合的颜色抽象类指针成员中,这里
通过这两图形抽象类和颜色抽象类进行解耦合,同时能够实现任何颜色和任何图形之间的组合,也是非常神奇的一种设计模式
下面是模式图:

下面是上面问题的代码实现:
输出为:

I'm bule rectangle

I'm red rectangle

I'm green square

I'm bule square

代码:

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. //颜色虚接口
  4. class colour
  5. {
  6. public:
  7.     virtual void getcol() = 0;
  8.     virtual ~colour(){};
  9. };
  10. //形状虚接口
  11. class graph
  12. {
  13. public:
  14.     virtual void setcol(colour* col) = 0; //依赖 桥接
  15.     virtual ~graph(){};
  16. protected:
  17.     colour* col; //聚合 桥接
  18. };
  19. //颜色具体实现
  20. class red:public colour
  21. {
  22. public:
  23.     virtual void getcol()
  24.     {
  25.         cout<<"I'm red ";
  26.     }
  27.     virtual ~red(){};
  28. };
  29. class bule:public colour
  30. {
  31. public:
  32.     virtual void getcol()
  33.     {
  34.         cout<<"I'm bule";
  35.     }
  36.     virtual ~bule(){};
  37. };
  38. class green:public colour
  39. {
  40. public:
  41.     virtual void getcol()
  42.     {
  43.         cout<<"I'm green ";
  44.     }
  45.     virtual ~green(){};
  46. };
  47. //形状具体实现并且桥接到颜色
  48. class square:public graph
  49. {
  50. public:
  51.     square()
  52.     {
  53.        this->col = NULL ;
  54.     }
  55.     virtual void setcol(colour* col)
  56.     {
  57.         this->col = col;
  58.     }
  59.     void print()
  60.     {
  61.         this->col->getcol();
  62.         cout<<" square\n";
  63.     }
  64.     virtual ~square(){};
  65. };
  66. class triangle:public graph
  67. {
  68.  public:
  69.    triangle()
  70.    {
  71.       this->col = NULL ; ;
  72.    }
  73.     virtual void setcol(colour* col)
  74.     {
  75.         this->col = col;
  76.     }
  77.     void print()
  78.     {
  79.         this->col->getcol();
  80.         cout<<" triangle\n";
  81.     }
  82.     virtual ~triangle(){};
  83. };
  84. class rectangle:public graph
  85. {
  86.     public:
  87.     rectangle()
  88.     {
  89.        this->col = NULL ;
  90.     }
  91.     virtual void setcol(colour* col)
  92.     {
  93.         this->col = col;
  94.     }
  95.     void print()
  96.     {
  97.         this->col->getcol();
  98.         cout<<" rectangle\n";
  99.     }
  100.     virtual ~rectangle(){};
  101. };
  102. int main(void)
  103. {
  104.     bule tblue;
  105.     red tred;
  106.     green tgreen;
  107.     rectangle trectangle;
  108.     trectangle.setcol(&tblue); //任意组合
  109.     trectangle.print();
  110.     trectangle.setcol(&tred); //任意组合
  111.     trectangle.print();
  112.     square tsquare;
  113.     tsquare.setcol(&tgreen); //任意组合
  114.     tsquare.print();
  115.     tsquare.setcol(&tblue); //任意组合
  116.     tsquare.print();
  117. }

作者微信:

               

时间: 2024-11-09 01:55:10

c++涉及模式 桥接模式(bridge Pattern)的相关文章

《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 2.2 桥接模式

2.2 桥接模式 "桥接模式"(Bridge Pattern)用于将"抽象"(abstraction,比如接口或算法)与实现方式相分离. 如果不用桥接模式,那么通常的写法是,创建若干个基类,用于表示各种抽象方式,然后从每个基类中继承出两个或多个子类,用于表示对这种抽象方式的不同实现办法.用了桥接模式之后,我们需要创建两套独立的"类体系"(class hierarchy):"抽象体系"定义了我们所要执行的操作(比如接口或高层算法

[Unity 设计模式]桥接模式(BridgePattern)

1.前言 继上一讲IOC模式的基础上继续本讲桥接模式,笔者感觉桥接模式是23种设计模式中桥接模式是最好用但也是最难理解的设计模式之一,23中设计模式就好武侠剧中一本武功秘籍,我们在工作过程中想要熟练运用其中的每一种设计模式就好比跟高手过招想要能运用好武侠秘籍中的每一招每一式,并且能随着对手出招的不同我们能随机应变对应的招数,这就要求我们对每一种设计模式都理解的非常深刻才能运用自如,打出组合拳的效果. 2.需求 我们在FPS类游戏中会碰到这样的需求--实现武器和角色,无论是敌人还是我方角色都能通过

Javascript设计模式理论与实战:桥接模式

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 基本理论 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式主要有4个角色组成: (1)抽象类 (2)扩充抽象类 (3)实现类接口 (4)具体实现类 根据javascript语言的特点,我们将其简化成2个角色: (1)扩充抽象类 (2)具体实现类 怎么去理解桥接模式呢?我们接下来举例说明 桥接

详解JavaScript设计模式开发中的桥接模式使用_基础知识

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 按照GoF的定义,桥接模式的作用在于"将抽象与其实现隔离开来,以便二者独立变化".这种模式对于Javascript中常见的事件驱动的编程大有裨益. 桥接模式最常见和实际的应用场合之一是事件监听器回调函数. example:事件监听器,把事件处理的语句封装到回调函数中,通过接口而不是实现进行编程. 基本理论 桥接

Javascript 桥接模式的理论与实战教程

基本理论 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.桥接模式主要有4个角色组成:(1)抽象类(2)扩充抽象类(3)实现类接口(4)具体实现类根据javascript语言的特点,我们将其简化成2个角色:(1)扩充抽象类(2)具体实现类怎么去理解桥接模式呢?我们接下来举例说明 桥接模式的实现 理解桥接模式的思想,关键是要理解其分离抽象部分和实现部分的思想.我们举例进行说明 最简单的桥接模式 其实我们最经常用的jQuery的each函数就是一个典型的桥接模式,我们模拟其实现如

.net设计模式实例之桥接模式( Bridge Pattern)

一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstraction from its implementation so that the two can vary independently.. 什么是聚合/组合: 聚合(Aggregation),当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系.聚合是关联关系的一种,是较

C#设计模式(8)——桥接模式(Bridge Pattern)

原文:C#设计模式(8)--桥接模式(Bridge Pattern) 一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是--把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能

Bridge Pattern (桥接模式)

What exactly does it mean?                                                                    The Bridge pattern is an application of the old advice, "prefer composition over inheritance".It becomes handy when you must subclass different times i

第7章 桥接模式(Bridge Pattern)

原文 第7章 桥接模式(Bridge Pattern) 定义:        在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种"多维度的变化"?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式. 意图:     将抽象部分与实现部分分离,使它们都可以独立的变化. 结构图: 举例:KFC中的可乐, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18