What
在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。
在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。
爲其他對象提供一種代理以控制對這個對象的訪問。
Why
在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由於某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。
- 職責清晰
- 擴展性強
How
想在訪問一個類時做一些控制。增加中間層。實現與被代理類組合。
抽象角色:聲明真實對象和代理對象的共同接口;
代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當於對真實對象進行封裝。
真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。