4 代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。

代理模式:

⒈远程代理  也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实(例如WEBSERVICES)

⒉虚拟代理  是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象(例如网页中的图片,通过虚拟代理来替代真实的图片,此时代理存储真实图片的路径和尺寸)

⒊安全代理  用来控制真实对象访问时的权限

⒋智能指引  指当调用真实对象时,代理处理另外一些事

代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

代理模式

代理模式的代码实现
1 #include <iostream>
2 #include <string>
3
4  using std::cout;
5  using std::endl;
6
7  //用于定义实体类和代理类的公用接口
8  class Subject
9 {
10  public:
11 virtual void Request() = 0;
12 };
13
14  //实体类
15 class RealSubject : public Subject
16 {
17 public:
18 void Request()
19 {
20 cout<<"实体类的要求操作"<<endl;
21 }
22 };
23
24 //代理类,保存了一个实体的引用
25 class Proxy : public Subject
26 {
27 public:
28 Proxy()
29 {
30 realSubject = new RealSubject();
31 }
32 void Request()
33 {
34 realSubject->Request(); //调用实体类的对应方法
35 }
36 private:
37 RealSubject* realSubject;
38 };
39
40 int main()
41 {
42 //客户端代码
43 Proxy* proxy = new Proxy();
44 proxy->Request();
45
46 return 0;
47 }
送礼物给MM的代理实现
1 #include <iostream>
2 #include <string>
3
4 using std::string;
5 using std::cout;
6 using std::endl;
7
8 class SchoolGirl
9 {
10 public:
11 SchoolGirl()
12 {
13 }
14 SchoolGirl(string name)
15 {
16 this->name = name;
17 }
18 string GetName()
19 {
20 return name;
21 }
22 private:
23 string name;
24 };
25
26 //代理接口类
27 class GiveGift
28 {
29 public:
30 virtual void GiveDolls() = 0;
31 virtual void GiveFlowers() = 0;
32 virtual void GiveChocolates() = 0;
33 };
34
35 //追求者类
36 class Pursuit : public GiveGift
37 {
38 public:
39 Pursuit(SchoolGirl mm)
40 {
41 this->mm = mm;
42 }
43 void GiveDolls()
44 {
45 cout<<mm.GetName()<<" 送你洋娃娃"<<endl;
46 }
47 void GiveFlowers()
48 {
49 cout<<mm.GetName()<<" 送你鲜花"<<endl;
50 }
51 void GiveChocolates()
52 {
53 cout<<mm.GetName()<<" 送你巧克力"<<endl;
54 }
55 private:
56 SchoolGirl mm;
57 };
58
59 //代理类
60 class Proxy : public GiveGift
61 {
62 public:
63 Proxy(SchoolGirl mm)
64 {
65 gg = new Pursuit(mm);
66 }
67 void GiveDolls()
68 {
69 gg->GiveDolls();//在实现方法中调用“追求者”类的相关方法
70 }
71 void GiveFlowers()
72 {
73 gg->GiveFlowers();
74 }
75 void GiveChocolates()
76 {
77 gg->GiveChocolates();
78 }
79 private:
80 Pursuit* gg;
81 };
82
83 int main()
84 {
85 //客户端代码
86 SchoolGirl jiaojiao("娇娇");
87
88 Proxy* daili = new Proxy(jiaojiao);
89
90 daili->GiveDolls();
91 daili->GiveFlowers();
92 daili->GiveChocolates();
93
94 ///娇娇不认识追求她的人,但却可以通过代理人得到礼物
95
96 return 0;
97 }
原文地址:https://www.cnblogs.com/sifenkesi/p/1721165.html