【设计模式系列】结构型模式之Proxy模式
生活随笔
收集整理的這篇文章主要介紹了
【设计模式系列】结构型模式之Proxy模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
概要 有時候可能我們不希望暴露現(xiàn)有對象的所有接口,只希望公開其中部分接口,具體來說,比如我們有個對象具有一系列的方法接口,如果我們只需要這些接口中間的一小部分,那么我們沒必要去創(chuàng)建這個對象本身,我們可以通過一個更輕量的對象作為代理來公開我們需要的那部分接口。
目的 基于需求提供代理對象來實現(xiàn)既有對象接口,可以通過這種模式來調(diào)整現(xiàn)有接口的封裝。
實例 如概要里面所述的通過代理來暴露部分接口的應(yīng)用比較簡單易懂,這里就不舉相關(guān)實例來進行說明了。這里舉個更典型的Proxy模式的應(yīng)用方式。 很多應(yīng)用中經(jīng)常需要加載圖片,視屏等大容量媒體對象,一些第三方庫會提供相應(yīng)的接口,以圖片為例,大致接口如下: class IImage { public:virtual void Show() = 0; };class HighImage : public IImage { public:HighImage(string path) {LoadImage(path);}void LoadImage();virtual void Show();...... };
HighImage是一個第三方已經(jīng)提供的支持顯示高清圖片的對象,在創(chuàng)建這個對象的時候會加載圖片,然后Show函數(shù)會把已經(jīng)加載的圖片顯示出來。 但是在實際使用中卻出現(xiàn)了這樣的問題,在初始化創(chuàng)建HighImage對象的時候,會加載高清圖片,由于高清圖片容量比較大,加載需要花費一定時間,目前的需求是希望在初始化創(chuàng)建過程中不要去花費時間加載圖片,而是在需要顯示的時候才去加載并顯示出來。 Proxy模式該登場了。讓我們通過Proxy代理對象來解決上面的問題。新建一個HighImageProxy類(備注:代碼中對象怎么銷毀不在考慮范疇)。
class HighImageProxy { public:HighImageProxy(string path) {mPath = path;}virtual void Show() {mImage = new HighImage(mPath);mImage->Show();} private:HighImage* mImage; string mPath; };
HighImageProxy類代理了HighImage的基本行為,但是它在創(chuàng)建對象時并不加載圖片,而是在Show方法里進行加載。對Client端而言,在創(chuàng)建HighImageProxy對象時不需要花費圖片加載的時間,滿足了我們的需求。
應(yīng)用 一些安全代理中經(jīng)常會限制對象的訪問權(quán)限,很多都是通過Proxy模式來實現(xiàn)的。如上面實例的Proxy模式應(yīng)用也是非常常見的一種。另外也要注意Proxy模式和Adapter模式的區(qū)別,Adapter模式是會改變接口調(diào)用形式來進行適配的,而Proxy模式則是不會改變現(xiàn)有接口形式,使用相同的接口調(diào)用方式。
目的 基于需求提供代理對象來實現(xiàn)既有對象接口,可以通過這種模式來調(diào)整現(xiàn)有接口的封裝。
實例 如概要里面所述的通過代理來暴露部分接口的應(yīng)用比較簡單易懂,這里就不舉相關(guān)實例來進行說明了。這里舉個更典型的Proxy模式的應(yīng)用方式。 很多應(yīng)用中經(jīng)常需要加載圖片,視屏等大容量媒體對象,一些第三方庫會提供相應(yīng)的接口,以圖片為例,大致接口如下: class IImage { public:virtual void Show() = 0; };class HighImage : public IImage { public:HighImage(string path) {LoadImage(path);}void LoadImage();virtual void Show();...... };
HighImage是一個第三方已經(jīng)提供的支持顯示高清圖片的對象,在創(chuàng)建這個對象的時候會加載圖片,然后Show函數(shù)會把已經(jīng)加載的圖片顯示出來。 但是在實際使用中卻出現(xiàn)了這樣的問題,在初始化創(chuàng)建HighImage對象的時候,會加載高清圖片,由于高清圖片容量比較大,加載需要花費一定時間,目前的需求是希望在初始化創(chuàng)建過程中不要去花費時間加載圖片,而是在需要顯示的時候才去加載并顯示出來。 Proxy模式該登場了。讓我們通過Proxy代理對象來解決上面的問題。新建一個HighImageProxy類(備注:代碼中對象怎么銷毀不在考慮范疇)。
class HighImageProxy { public:HighImageProxy(string path) {mPath = path;}virtual void Show() {mImage = new HighImage(mPath);mImage->Show();} private:HighImage* mImage; string mPath; };
HighImageProxy類代理了HighImage的基本行為,但是它在創(chuàng)建對象時并不加載圖片,而是在Show方法里進行加載。對Client端而言,在創(chuàng)建HighImageProxy對象時不需要花費圖片加載的時間,滿足了我們的需求。
應(yīng)用 一些安全代理中經(jīng)常會限制對象的訪問權(quán)限,很多都是通過Proxy模式來實現(xiàn)的。如上面實例的Proxy模式應(yīng)用也是非常常見的一種。另外也要注意Proxy模式和Adapter模式的區(qū)別,Adapter模式是會改變接口調(diào)用形式來進行適配的,而Proxy模式則是不會改變現(xiàn)有接口形式,使用相同的接口調(diào)用方式。
轉(zhuǎn)載于:https://www.cnblogs.com/secbook/archive/2012/04/17/2655119.html
總結(jié)
以上是生活随笔為你收集整理的【设计模式系列】结构型模式之Proxy模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给程序员的VIM速查卡
- 下一篇: 适用于 php-5.2 的 php.in