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

 更新时间:2018年04月07日 12:10:20   作者:chencarl  
这篇文章主要为大家详细介绍了C++设计模式之桥接模式Bridge,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

桥接模式属于先天模式,这里的先天模式就是说一开始就要把结构搭建好,方便后来的扩展,而不是对已经出现的模块和接口进行改进扩展的。桥接的核心在于实体类和操作类之间的聚合关系,这个聚合关系就是我们所说的"桥",不同于装饰、代理和适配器模式的中的聚合关系,桥接不存在两者之间的继承关系,操作类是完全解耦的,而实体类对于操作类也只是弱耦合。

作用

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

类视图

实现

//操作类
class action
{
public:
  virtual void do()=0;
};

class write : public action
{
public:
   void do(){ count << "to write\n";}
};

class draw : public action
{
public:
  void do() { count << "to draw\n";}
};

class gift : public action
{
public:
  void do {count << "to gift\n";}
};

//实体类
class pen
{
public:
  pen(): m_pAction(NULL){}
  virtual ~pen(){ delete m_pAction;}
  virtual void use();
  void setaction(action* pAction){m_pAction = pAction;}
protected:
  action* m_pAction;
};

class pencil : public pen
{
  void use()
  { 
    cout << "use pencil ";
    m_pAction.do(); 
  }
};

class brush : public pen
{
  void use()
  { 
    cout << "use brush ";
    m_pAction.do(); 
  }
};

class goldenpen : public pen
{
  void use()
  { 
    cout << "use goldenpen ";
    m_pAction.do(); 
  }
};

int main
{
  ballpen inHand;
  inHand.setaction(new gift());
  inHand.use();
}

上面例子简单的说明了实体类pen和操作类action之间的桥接关系,如果需要扩展的情况下,我们可以分别对pen和action进行继承扩展,不会牵扯到另外一边的改动。比如我们再扩展一种笔或者一种笔的用法,直接扩展笔的种类或者用法的种类即可,这样就达到了低耦合易扩展的目的。

应用场景

  • 当对象存在多种变化的因素时,考虑对其变化的因素和场景进行抽象,然后进行桥接;如笔拥有不同的功能。
  • 当多个对象存在多种变化的因素时,考虑将这部分变化的部分抽象出来再聚合进来;比如不同品牌的电脑安装不同的系统、使用不同的软件等,相当于将第一条进行横向扩展,增加桥接的数量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++ Clock类模拟实现闹钟运行

    C++ Clock类模拟实现闹钟运行

    这篇文章主要为大家详细介绍了C++ Clock类模拟实现闹钟运行,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Qt重写QTreeView自绘实现酷炫样式

    Qt重写QTreeView自绘实现酷炫样式

    QTreeView,顾名思义,就是一种树形的控件,在我们需要做类似于文件列表的视图时,是一个不错的选择,下面我们就来看看qt如何重写QTreeView实现酷炫样式,感兴趣的可以了解一下
    2023-08-08
  • C++实现LeetCode(101.判断对称树)

    C++实现LeetCode(101.判断对称树)

    这篇文章主要介绍了C++实现LeetCode(101.判断对称树),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++中如何修改const变量你知道吗

    C++中如何修改const变量你知道吗

    这篇文章主要为大家详细介绍了C++修改const变量,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 基于c语言知识点的补遗介绍

    基于c语言知识点的补遗介绍

    本篇文章是对c语言知识点的一些补遗进行详细的分析介绍,需要的朋友参考下
    2013-05-05
  • boost.asio框架系列之socket编程

    boost.asio框架系列之socket编程

    这篇文章介绍了boost.asio框架系列之socket编程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • VSCode无法打开源文件及无法打开链接库文件的解决方法

    VSCode无法打开源文件及无法打开链接库文件的解决方法

    本文主要介绍了VSCode无法打开源文件及无法打开链接库文件的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++ 双冒号::符号详解

    C++ 双冒号::符号详解

    本文主要介绍了C++ 双冒号::符号详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • C++ STL中一些常用算法总结

    C++ STL中一些常用算法总结

    都说STL是数据容器与算法的高度组合,在前面的文章中我们介绍了常见的几种容器,vector、list、map、deque等,今天我们再来介绍下STL中常用的一些算法,需要的朋友可以参考下
    2024-02-02
  • C++实现LeetCode(186.翻转字符串中的单词之二)

    C++实现LeetCode(186.翻转字符串中的单词之二)

    这篇文章主要介绍了C++实现LeetCode(186.翻转字符串中的单词之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论