当前位置:   article > 正文

C++设计模式-桥接模式_c++ 桥接模式

c++ 桥接模式

目录

 

 

基本概念

代码与实例


 

基本概念

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

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

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

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

 

代码与实例

程序运行截图如下:

源码如下:

Head.h

  1. #ifndef HEAD_H
  2. #define HEAD_H
  3. #include <list>
  4. #include <string>
  5. #include <iostream>
  6. using namespace std;
  7. //手机软件
  8. class HandSetSoft{
  9. public:
  10. virtual void run();
  11. virtual ~HandSetSoft();
  12. protected:
  13. HandSetSoft();
  14. HandSetSoft(HandSetSoft &h);
  15. HandSetSoft &operator = (HandSetSoft &t);
  16. string m_name;
  17. };
  18. //手机游戏
  19. class HandSetGame : public HandSetSoft{
  20. public:
  21. HandSetGame(const string &name);
  22. ~HandSetGame();
  23. void run();
  24. };
  25. //手机通讯录
  26. class HandSetAddressList: public HandSetSoft{
  27. public:
  28. HandSetAddressList(const string &name);
  29. ~HandSetAddressList();
  30. void run();
  31. };
  32. //手机品牌
  33. class HandSetBrand{
  34. public:
  35. void addHandSetSoft(HandSetSoft *h);
  36. virtual void run();
  37. virtual ~HandSetBrand();
  38. protected:
  39. HandSetBrand();
  40. HandSetBrand(HandSetBrand &h);
  41. HandSetBrand &operator = (HandSetBrand &t);
  42. list<HandSetSoft*> m_soft;
  43. };
  44. //手机品牌N
  45. class HandSetBrandN: public HandSetBrand{
  46. public:
  47. ~HandSetBrandN();
  48. void run();
  49. };
  50. //手机品牌M
  51. class HandSetBrandM: public HandSetBrand{
  52. public:
  53. ~HandSetBrandM();
  54. void run();
  55. };
  56. #endif

Head.cpp

  1. #include "Head.h"
  2. void HandSetSoft::run()
  3. {
  4. }
  5. HandSetSoft::HandSetSoft()
  6. {
  7. }
  8. HandSetSoft::HandSetSoft(HandSetSoft &h)
  9. {
  10. }
  11. HandSetSoft::~HandSetSoft()
  12. {
  13. cout << "HandSetSoft::~HandSetSoft()" << endl;
  14. }
  15. HandSetSoft& HandSetSoft::operator=(HandSetSoft &t)
  16. {
  17. return HandSetSoft();
  18. }
  19. HandSetGame::HandSetGame(const string &name)
  20. {
  21. m_name = name;
  22. }
  23. HandSetGame::~HandSetGame()
  24. {
  25. cout << "HandSetGame::~HandSetGame()" << endl;
  26. }
  27. void HandSetGame::run()
  28. {
  29. cout << "运行手机游戏 ---- " << m_name << endl;
  30. }
  31. HandSetAddressList::HandSetAddressList(const string &name)
  32. {
  33. m_name = name;
  34. }
  35. HandSetAddressList::~HandSetAddressList()
  36. {
  37. cout << "HandSetAddressList::~HandSetAddressList()" << endl;
  38. }
  39. void HandSetAddressList::run()
  40. {
  41. cout << "运行手机通讯录 ---- " << m_name << endl;
  42. }
  43. void HandSetBrand::addHandSetSoft(HandSetSoft *h)
  44. {
  45. m_soft.push_back(h);
  46. }
  47. void HandSetBrand::run()
  48. {
  49. }
  50. HandSetBrand::HandSetBrand()
  51. {
  52. }
  53. HandSetBrand::HandSetBrand(HandSetBrand &h)
  54. {
  55. }
  56. HandSetBrand::~HandSetBrand()
  57. {
  58. cout << "HandSetBrand::~HandSetBrand()" << endl;
  59. }
  60. HandSetBrand & HandSetBrand::operator=(HandSetBrand &t)
  61. {
  62. return HandSetBrand();
  63. }
  64. HandSetBrandN::~HandSetBrandN()
  65. {
  66. cout << "HandSetBrandN::~HandSetBrandN()" << endl;
  67. for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){
  68. delete (*i);
  69. }
  70. m_soft.clear();
  71. }
  72. void HandSetBrandN::run()
  73. {
  74. for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){
  75. (*i)->run();
  76. }
  77. }
  78. HandSetBrandM::~HandSetBrandM()
  79. {
  80. cout << "HandSetBrandM::~HandSetBrandM()" << endl;
  81. for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){
  82. delete (*i);
  83. }
  84. m_soft.clear();
  85. }
  86. void HandSetBrandM::run()
  87. {
  88. for(list<HandSetSoft*>::iterator i = m_soft.begin(); i != m_soft.end(); i++){
  89. (*i)->run();
  90. }
  91. }

main.cpp

  1. #include "Head.h"
  2. int main(int *argc, int *argv){
  3. HandSetBrand *band1 = new HandSetBrandN;
  4. band1->addHandSetSoft(new HandSetGame("王者荣耀"));
  5. band1->addHandSetSoft(new HandSetGame("吃鸡"));
  6. band1->addHandSetSoft(new HandSetGame("赛尔号"));
  7. band1->addHandSetSoft(new HandSetAddressList("流氓公司出的"));
  8. band1->addHandSetSoft(new HandSetAddressList("好用的软件"));
  9. band1->run();
  10. delete band1;
  11. cout << endl << "---------------华丽的分割线---------------" << endl << endl;
  12. HandSetBrand *band2 = new HandSetBrandM;
  13. band2->addHandSetSoft(new HandSetGame("QQ飞车"));
  14. band2->addHandSetSoft(new HandSetAddressList("流氓公司的"));
  15. band2->run();
  16. delete band2;
  17. getchar();
  18. return 0;
  19. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/822985
推荐阅读
相关标签
  

闽ICP备14008679号