首页 > 代码库 > 设计模式——桥接模式(C++实现)
设计模式——桥接模式(C++实现)
1 [root@ ~/learn_code/design_pattern/18_bridge]$ cat Abstraction.h 2 #ifndef _ABSTRACTION_H_ 3 #define _ABSTRACTION_H_ 4 5 class AbstractionImplement; 6 7 class Abstraction 8 { 9 public: 10 virtual void Operation()=0;//定义接口,表示该类所支持的操作 11 virtual ~Abstraction(); 12 protected: 13 Abstraction(); 14 }; 15 16 class RefinedAbstractionA:public Abstraction 17 { 18 public: 19 RefinedAbstractionA(AbstractionImplement* imp);//构造函数 20 virtual void Operation();//实现接口 21 virtual ~RefinedAbstractionA();//析构函数 22 private: 23 AbstractionImplement* _imp;//私有成员 24 }; 25 26 class RefinedAbstractionB:public Abstraction 27 { 28 public: 29 RefinedAbstractionB(AbstractionImplement* imp);//构造函数 30 virtual void Operation();//实现接口 31 virtual ~RefinedAbstractionB();//析构函数 32 private: 33 AbstractionImplement* _imp;//私有成员 34 }; 35 #endif 36 37 38 [root@ ~/learn_code/design_pattern/18_bridge]$ cat Abstraction.cpp 39 #include "Abstraction.h" 40 #include "AbstractionImplement.h" 41 #include <iostream> 42 43 using namespace std; 44 45 Abstraction::Abstraction() 46 {} 47 48 Abstraction::~Abstraction() 49 {} 50 51 RefinedAbstractionA::RefinedAbstractionA(AbstractionImplement* imp) 52 { 53 this->_imp = imp; 54 } 55 56 RefinedAbstractionA::~RefinedAbstractionA() 57 { 58 delete this->_imp; 59 this->_imp = NULL; 60 } 61 62 void RefinedAbstractionA::Operation() 63 { 64 cout << "RefinedAbstractionA::Operation" << endl; 65 this->_imp->Operation(); 66 } 67 68 RefinedAbstractionB::RefinedAbstractionB(AbstractionImplement* imp) 69 { 70 this->_imp = imp; 71 } 72 73 RefinedAbstractionB::~RefinedAbstractionB() 74 { 75 delete this->_imp; 76 this->_imp = NULL; 77 } 78 79 void RefinedAbstractionB::Operation() 80 { 81 cout << "RefinedAbstractionB::Operation" << endl; 82 this->_imp->Operation(); 83 } 84 85 86 [root@ ~/learn_code/design_pattern/18_bridge]$ cat AbstractionImplement.h 87 #ifndef _ABSTRACTIONIMPLEMENT_H_ 88 #define _ABSTRACTIONIMPLEMENT_H_ 89 90 //抽象基类,定义了实现的接口 91 class AbstractionImplement 92 { 93 public: 94 virtual void Operation()=0;//定义操作接口 95 virtual ~AbstractionImplement(); 96 protected: 97 AbstractionImplement(); 98 }; 99 100 // 继承自AbstractionImplement,是AbstractionImplement的不同实现之一101 class ConcreteAbstractionImplementA:public AbstractionImplement102 {103 public:104 ConcreteAbstractionImplementA();105 void Operation();//实现操作106 ~ConcreteAbstractionImplementA();107 protected:108 };109 110 // 继承自AbstractionImplement,是AbstractionImplement的不同实现之一111 class ConcreteAbstractionImplementB:public AbstractionImplement112 {113 public:114 ConcreteAbstractionImplementB();115 void Operation();//实现操作116 ~ConcreteAbstractionImplementB();117 protected:118 };119 #endif120 121 122 [root@ ~/learn_code/design_pattern/18_bridge]$ cat AbstractionImplement.cpp123 #include "AbstractionImplement.h"124 #include <iostream>125 126 using namespace std;127 128 AbstractionImplement::AbstractionImplement()129 {}130 131 AbstractionImplement::~AbstractionImplement()132 {}133 134 ConcreteAbstractionImplementA::ConcreteAbstractionImplementA()135 {}136 137 ConcreteAbstractionImplementA::~ConcreteAbstractionImplementA()138 {}139 140 void ConcreteAbstractionImplementA::Operation()141 {142 cout << "ConcreteAbstractionImplementA Operation" << endl;143 }144 145 ConcreteAbstractionImplementB::ConcreteAbstractionImplementB()146 {}147 148 ConcreteAbstractionImplementB::~ConcreteAbstractionImplementB()149 {}150 151 void ConcreteAbstractionImplementB::Operation()152 {153 cout << "ConcreteAbstractionImplementB Operation" << endl;154 }155 156 157 [root@ ~/learn_code/design_pattern/18_bridge]$ cat main.cpp158 #include "Abstraction.h"159 #include "AbstractionImplement.h"160 #include <iostream>161 162 using namespace std;163 164 int main()165 {166 /* 将抽象部分与它的实现部分分离,使得它们可以独立地变化167 168 1、抽象Abstraction与实现AbstractionImplement分离;169 170 2、抽象部分Abstraction可以变化,如new RefinedAbstractionA(imp)、new RefinedAbstractionB(imp2);171 172 3、实现部分AbstractionImplement也可以变化,如new ConcreteAbstractionImplementA()、new ConcreteAbstractionImplementB();173 174 */175 176 AbstractionImplement* imp = new ConcreteAbstractionImplementA(); //实现部分ConcreteAbstractionImplementA177 Abstraction* abs = new RefinedAbstractionA(imp); //抽象部分RefinedAbstractionA178 abs->Operation();179 180 cout << "-----------------------------------------" << endl;181 182 AbstractionImplement* imp1 = new ConcreteAbstractionImplementB(); //实现部分ConcreteAbstractionImplementB183 Abstraction* abs1 = new RefinedAbstractionA(imp1); //抽象部分RefinedAbstractionA184 abs1->Operation();185 186 cout << "-----------------------------------------" << endl;187 188 AbstractionImplement* imp2 = new ConcreteAbstractionImplementA(); //实现部分ConcreteAbstractionImplementA189 Abstraction* abs2 = new RefinedAbstractionB(imp2); //抽象部分RefinedAbstractionB190 abs2->Operation();191 192 cout << "-----------------------------------------" << endl;193 194 AbstractionImplement* imp3 = new ConcreteAbstractionImplementB(); //实现部分ConcreteAbstractionImplementB195 Abstraction* abs3 = new RefinedAbstractionB(imp3); //抽象部分RefinedAbstractionB196 abs3->Operation();197 198 cout << endl;199 return 0;200 }
参考:
http://www.cnblogs.com/jiese/p/3164940.html
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/bridge.html
设计模式——桥接模式(C++实现)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。