proxy模式

 

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <queue>
 5 #include <set>
 6 #include <algorithm>
 7 #include <map>
 8 #include <stack>
 9 using namespace std;
10 
11 // 女学生类
12 // 相当于client类
13 class cSchoolGirl {
14 private:
15     string m_name; // 姓名
16 
17 public:
18     string GetName() const {
19         return m_name;
20     }
21     void SetName(string name) {
22         m_name = name;
23     }
24 };
25 
26 // 送礼物接口
27 // 相当于Subject类,定义了实体和代理的公共接口
28 class IGiveGift {
29 public:
30     virtual string GiveFlowers() = 0;
31 };
32 
33 // 追求者
34 // 相当于RealSubject类,实际工作的类
35 class cPursuit: public IGiveGift {
36 private:
37     cSchoolGirl* m_mm;
38 
39 public:
40     cPursuit(cSchoolGirl* mm) :
41             m_mm(mm) {
42     }
43 
44     string GiveFlowers() {
45         return m_mm->GetName() + string(" 送你鲜花");
46     }
47 };
48 
49 // 代理类
50 // 即Proxy类,主要的功能是代理RealSubject接受外界的调用
51 // 使得减少了RealSubject与外界的耦合
52 class cProxy: public IGiveGift {
53 private:
54     cPursuit* m_gg;
55 
56 public:
57     cProxy(cSchoolGirl* mm) {
58         m_gg = new cPursuit(mm);
59     }
60     // 代理的时候可以添加一点额外的功能,例如多加一句“你好”
61     string GiveFlowers() {
62         return string("你好,") + m_gg->GiveFlowers();
63     }
64 };
65 
66 int main() {
67     cSchoolGirl jiaojiao;
68     jiaojiao.SetName("caroline");
69     cProxy daili(&jiaojiao);
70     cout << daili.GiveFlowers() << endl;
71     return 0;
72 }

 

posted on 2012-07-24 19:43  kakamilan  阅读(247)  评论(0编辑  收藏  举报

导航