**定義:**代理模式(ProxyPattern),為其他對象提供一種代理以控制對這個對象的訪問。
類型:結構型模式
分類:
1. 遠程代理,為一個對象在不同的地址空間提供局部代表。
1. 虛代理,根據需要創建開銷很大的對象。
1. 保護代理,控制對原始對象的訪問。
1. 智能指引,取代簡單指針,在訪問時執行一些附加操作。
概述:
1. 遠程代理,如代理商,什么區域代、省代之類的都算是遠程代理。代理商在某一局部代表廠商。????
1. 虛代理,主要是為了解決一次開銷過大的情況,例如打開大的文件之類的。
1. 保護代理,律師就是代理委托人行使其保護其權利,正好是保護代理。
1. 智能指針,智能指針,畫圖雙緩存等都算是智能指引了,主要是復用對象的某些特性自動完成某些工作,如構造函數、析構函數之類的。
????????無論是哪一種代理,都是一個代理對象來代理完成被代理的工作,當然這期間代理對象會添加一些功能使得客戶更方便地操作。為了讓客戶操作代理對象像操作原對象一樣方便,代理類一般會保持和原對象相同的接口。上面四種代理模式,只是一些經常被用到的代理功能。實際的使用中,并不一定需要拘泥于這四種代理模式。一切為了讓用戶更方便更快捷地操作對象而產生的中間類都算是代理模式的運用。代理模式其實很簡單,就是一個代理類對另一個類的再封裝,以便更好的讓客戶調用。
類圖:

參與者:
1. Client,客戶端提供交互。
1. Subject,提供接口。
1. RealSubject,完成接口,是真正需要被代理的類。
1. Proxy,有一個Subject的指針,指向RealSubject。調用RealSubject.DoSomething()實現DoSomething接口,并擴展一些功能。
示例代碼:
~~~
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace Design13
6 {
7 // 主要是提供接口
8 abstract class Subject
9 {
10 public abstract void DoSomething();
11 }
12
13 // 具體的對象
14 class RealSubject : Subject
15 {
16 public override void DoSomething()
17 {
18 Console.WriteLine("做一些事");
19 }
20 }
21
22 // 代理類,和具體的對象實現的是相同的接口
23 class Proxy : Subject
24 {
25 private Subject realSubject;
26 public Proxy()
27 {
28 realSubject = new RealSubject();
29 }
30 public override void DoSomething()
31 {
32 if (realSubject != null)
33 {
34 realSubject.DoSomething();
35 Console.WriteLine("再做一些其他事");
36 }
37 }
38 }
39
40 // Client
41 class Program
42 {
43 static void Main(string[] args)
44 {
45 Proxy proxy = new Proxy();
46 proxy.DoSomething();
47 }
48 }
49 }
~~~
**注意:**如果是C++,抽象類一定要注意析構函數一定要是虛函數。
與其他模式比較:代理模式與裝飾者模式有一定的類似度。但是兩者目的不一樣,代理模式是為了讓客戶更方便地訪問。而裝飾者模式側重于添加新的功能。
優缺點:
1. 優點,減少內存的使用。
1. 缺點,加大了結構的復雜度,需要單獨管理外部狀態。
參考資料:
1. 《設計模式——可復用面向對象軟件基礎》
1. 《大話設計模式》
1. 《Head?First設計模式》
- 前言
- 設計模式六大原則
- 1——創建型模式之簡單工廠模式
- 2——創建型模式之工廠方法模式
- 3——創建型模式之抽象工廠模式
- 4——創建型模式之單例模式
- 5——創建型模式之建造者模式
- 6——創建型模式之原型模式
- 7——結構型模式之適配器模式
- 8——結構型模式之橋接模式
- 9——結構型模式之組合模式
- 10——結構型模式之裝飾者模式
- 11——結構型模式之外觀模式
- 12——結構型模式之享元模式
- 13——結構型模式之代理模式
- 14——行為型模式之職責鏈模式
- 15——行為型模式之命令模式
- 16——行為型模式之解釋器模式
- 17——行為型模式之迭代器模式
- 18——行為型模式之中介者模式
- 19——行為型模式之備忘錄模式
- 20——行為型模式之觀察者模式
- 21——行為型模式之狀態模式
- 22——行為型模式之策略模式
- 23——行為型模式之模板方法模型
- 24——行為型模式之訪問者模式
- 設計模式總結