http://www.cppblog.com/wolf/articles/124599.html
概念
代理这个词对我们来说非常熟悉,比如上网经常使用的代理服务器,还有销售代理商等。就是客户与目标之间的桥梁。
设计模式中的代理模式(Proxy)是这样定义的:为其他对象提供一种代理以控制对这个对象的访问。
若要为其他对象提供代理服务,那么首先本身也要具有与被代理对象同样的方法,那么这样在访问时才能真正起到(透明)代理的作用。
所以代理类一般同被代理类是继承于同一个类的兄弟类,区别就是他是为别人服务的。
这样说来,表面看代理很风光,啥都得通过他,好像没他不行似的,其实他就是个跑堂的!
组成部分
1.抽象主题:基类,声明了代理对象和真实对象的共同点;
2.真实主题:真正需要被调用的对象;
3.代理对象:代理真实对象的对象。
分类
1.远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。这个不同的地址空间可以是在本机器上,也可以在另一台机器中。
2.虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,使其只有在真正需要时才被创建。
3.安全代理:也叫保护代理,用来控制真实对象访问时的权限,如果有必要的话,可以给不同调用者提供不同的权限。
4.智能指引:是指当调用真实对象时,代理处理另外一些事,比如记录对此对象的调用次数等。
5.写时拷贝:虚拟代理的一种,把复制推迟到只有客户的需要时才进行。
6.缓存代理:为某一个目标的操作结果提供临时存储空间,以便其他客户的可以共享访问,有点缓存的味道。
7.防火墙代理:保护对象,不让用户访问,安全代理的特例。
8.同步代理:可以让几个用户同时访问同一个对象而不产生冲突。
常用的是前四种代理方式。
UML类图
实例代码
1)Proxy.h

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

2)Proxy.cpp

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

3)Main.cpp

2

3

4

5

6

7

8

9

10

11

12

13

14

15
