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 AbstractionImplement
102 {
103 public:
104 ConcreteAbstractionImplementA();
105 void Operation();//实现操作
106 ~ConcreteAbstractionImplementA();
107 protected:
108 };
109
110 // 继承自AbstractionImplement,是AbstractionImplement的不同实现之一
111 class ConcreteAbstractionImplementB:public AbstractionImplement
112 {
113 public:
114 ConcreteAbstractionImplementB();
115 void Operation();//实现操作
116 ~ConcreteAbstractionImplementB();
117 protected:
118 };
119 #endif
120
121
122 [root@ ~/learn_code/design_pattern/18_bridge]$ cat AbstractionImplement.cpp
123 #include "AbstractionImplement.h"
124 #include <iostream>
125
126 using namespace std;
127
128 AbstractionImplement::AbstractionImplement()
129 {}
130