今天,想和大家分享一下代理模式。首先呢,我想先用一句話概括一下代理模式。
代理模式(Proxy),為其他對象提供一種代理以控制對這個對象的通路。
那麼,代理模式一般都在什麼情況下使用呢?大體可以分為以下四種:
- 遠端代理,也就是為一個對象在不同的位址空間提供局部代表。這樣可以隐藏一個對象存在于不同位址空間的事實。
- 虛拟代理,是根據需要建立開銷很大的對象。通過它來存放執行個體化需要很長時間的真實對象。
- 安全代理,用來控制真實對象通路時的權限。
- 智能指針,是指當調用真實的對象時,代理處理另外一些事。
其實看起來用途還是蠻多的,不過說實話,基本的結構并不複雜哦!我是說最最基本的結構看起來并不複雜哦,下面可以看一下類的結構圖:
下面簡單介紹一下圖中提到的幾個類型,Client不用多說,顧名思義就是所提供服務的目标對象,Subject類型是RealSubject和Proxy的公共接口,同理也就是說,Proxy類型和RealSubject類型都繼承自Subject類型,通過Proxy類型來引用RealSubject類型,以達到隐藏RealSubject類型的目的,進而實作對RealSubject類型的代理功能。
下面還是按老套路,把用Objective C實作的簡單代碼給大家做一個展示。
=============================================
- Subject類接口
1 2 3 4 5 | |
- Subject類實作
1 2 3 4 5 6 7 | |
- RealSubject類接口
1 2 3 4 | |
- RealSubject類實作
1 2 3 4 5 6 7 8 | |
- Proxy類接口
1 2 3 4 5 6 7 | |
- Proxy類實作
1 2 3 4 5 6 7 8 9 10 | |
- Client端(Main()方法調用)
1 2 3 4 5 6 7 8 9 10 11 | |
好啦,完工!簡單吧!呵呵!一共也沒幾行代碼哦,關鍵是思想、思路。這才是精髓啊,關鍵不在模式本身的套路,關鍵是實作上的方法思路,這才是重點啊。關于這一點還是需要細細揣摩的啊!