Proxy(代理)--对象结构型模式
Proxy(代理)–對象結構型模式
一、意圖
為其他對象提供一種代理以控制對這個對象的訪問。
二、動機
1.在面向對象系統中,有些對象由于某種原因(比如對象創建的開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問等),直接訪問會給使用者、或者系統結構帶來很大麻煩。
2.如何在不失去透明操作對象的同時來管理/控制這些對象特有的復雜性?增加一層間接層是軟件開發中常見的解決方式。
三、適用性
1.遠程代理(Remote Proxy)為一個對象在不同的地址空間提供局部代表。
2.虛代理(Virtual Proxy)根據需要創建開銷很大的對象。
3.保護代理(Protection Proxy)控制對原始對象的訪問。
4.智能指引(Smart Reference)取代了簡單的指針,它在訪問對象時執行一些附加操作。
四、結構
這是運行時刻一種可能的代理結構的對象圖。
五、效果
Proxy模式在訪問對象時引入了一定程度的間接性。
1.Remote Proxy可以隱藏一個對象存在于不同地址空間的事實。
2.Virtual Proxy可以進行最優化,例如根據要求創建對象。
3.Protection Proxies和Smart Reference都允許在訪問一個對象時有一些附加的內務處理。
六、實現
1.重載C++中的存取運算符。
2.Proxy并不總是需要知道實體的類型。
七、要點總結
1.“增加一層間接層”是軟件系統中對許多復雜問題的一種常見解決方法。在面向對象系統中,直接使用某些對象會帶來很多問題,作為間接層的Proxy對象便是解決這一問題的常用手段。
2.具體proxy設計模式的實現方法、實現粒度都相差很大,有些可能對單個對象做細粒度的控制,入copy-on-wirte技術,有些可能對組件模式提供抽象代理層,在架構層次對對象做proxy。
3.Proxy并不一定要求保持接口完整的一致性,只要能夠實現間接控制,有時候損及一些透明性是可以接受的。
八、相關模式
Adapter:適配器Adapter為它所適配的對象提供一個不同的接口。想反,代理提供了與它實體相同的接口。然而,用于訪問保護的代理可能會拒絕執行實體會執行的操作,因此,它的接口實際上可能只是實體接口的一個子集。
Decorator:盡管decoratro的實現部分與代理相似,但decortor的目的不一樣。Decorator為對象添加一個或多個功能,而代理則控制對對象的訪問。
代理的實現與decorator的實現類似,但是在相似程度傻姑娘有所差別,Protection Proxy的實現可能與decorator的實現差不多。另一方面,Remote Proxy不包含對實體的直接引用,而只是一個間接引用,如“主機ID,主機的局部地址。”Virtual Proxy開始的時候使用一個間接引用,例如一個文件名,但最終將獲得并使用一個直接引用。
九、舉例說明
找工作時找HR就是直接訪問,找獵頭就是代理。
本文為李建忠設計模式視頻的筆記以及《設計模式-可復用面向對象的軟件的基礎》和自己的部分見解
總結
以上是生活随笔為你收集整理的Proxy(代理)--对象结构型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吃藕粉减肥吗
- 下一篇: Chain of responsibil