淺讀《大話設(shè)計(jì)模式》————7、為別人做嫁衣——代理模式
通讀全文,我發(fā)現(xiàn)代理模式中的代理還是與現(xiàn)實(shí)中的代理還是不同的。代理模式中,真正動作人要代理做的事情,自己也要定義做的方法,就是自己要處理具體的事情。而代理,無非就是利用成員對象進(jìn)行接口轉(zhuǎn)移罷了。但是現(xiàn)實(shí)世界,代理是要全權(quán)處理所代理的事情的。游戲開發(fā)公司完全只是開發(fā),與玩家的交互,服務(wù)器的維護(hù)則完全是運(yùn)營代理商的事。所以,在學(xué)習(xí)代理模式時(shí),我覺得應(yīng)該首先明白在思想上對這兩者進(jìn)行弄明白。
代理模式:為其他對象提供一種代理以控制對這個(gè)對象的訪問[DP]。
如果從以上這個(gè)定義,我們還可以挖掘出另一種層次的意思:代理模式為真實(shí)對象的訪問提供了安全性屏障。
代理模式的設(shè)計(jì):
1、Subject類,定義了RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy.
abstract class Subject
{
Public abstract void Request();
}
2、RealSubject類,定義Proxy所代表的真實(shí)實(shí)體
Classs RealSubject: Subject
{
Public override void Request()
{
Console.WriteLine("真實(shí)的請求");
}
}
3、Proxy類,保存一個(gè)引用使得代理可以訪問實(shí)體,并提供一個(gè)與Subject的接口相同的接口,這樣代理就可以用來替代實(shí)體。
class Proxy : Subject
{
RealSubject realSubject;
Public override void Request()
{
If(realSubject == null)
{
realSubject = new RealSubject();
}
realSubject .Request() ;
}
}
4、客戶端代碼
Static void Main(string [] args)
{
Proxy proxy = new Proxy();
proxy.Request();
Console.Read();
}
關(guān)于代理模式的幾個(gè)應(yīng)用,我沒看很明白,可能自己用得不多,不過似乎總結(jié)下來,代理模式起碼的作用有:控制對真實(shí)對象訪問的安全性;虛擬代理優(yōu)化對大對象的訪問;在真實(shí)對象操作之時(shí),代理還可以做另外一些事情,使程序更智能。