簡體中文 | 繁體中文

大話設計模式-----第79章


惡人成長日記 殘情惡少的隱婚妻 饕餮之豔 總裁令:老婆,你還欠我寶寶 惡女當家 皇后輕狂:邪王霸愛特工妻 盛世重生之苓娘傳 紅燭淚 鑽石男神:替身嬌妻來襲 無敵劍修系統 仙墓中走出的強 小妖不上天 狼性夫君請自重 穿越之如意佳妻 萌妻當道:嗜血總裁77日寵 鳳鬥凰:太子甩一邊 惡魔校草:臭丫頭休想逃 化身 帝圖神 落地一把98K
第79章

大B:“下面以論壇中已註冊使用者和遊客的許可權不同來作為第一個例子,我再給你詳細說一下。”

大B:“已註冊的使用者擁有發帖,修改自己的註冊資訊,修改自己的帖子等功能;而遊客只能看到別人發的帖子,沒有其他許可權。為了簡化程式碼,更好的顯示出代理模式的骨架,我們這裡只實現發帖許可權的控制。首先我們先實現一個抽象主題角色MyForum,裡面定義了真實主題和代理主題的共同介面——發帖功能。”

程式碼如下:

publicinterfaceMyForum

{

publicvoidAddFile();

}

大B:“這樣,真實主題角色和代理主題角色都要實現這個介面。其中真實的主題角色基本就是將這個介面的方法內容填充進來。所以在這裡就不再說它的實現。我們把主要的精力放到關鍵的代理主題角色上。”

代理主題角色程式碼大體如下:

publicclassMyForumProxyimplementsMyForum

{

privateRealMyForumforum;

privateintpermission;//許可權值

publicMyForumProxy(intpermission)

{

forum=newRealMyForum()

this.permission=permission;

}

//實現的介面

publicvoidAddFile()

{//滿足許可權設定的時候才能夠執行操作

//Constants是一個常量類

if(Constants.ASSOCIATOR……permission)

{

forum.AddFile();

}

else

System.out.println(“YouarenotaassociatorofMyForum,pleaseregiste!”);

}

}

大B:“這樣就實現了代理模式的功能。當然你也可以在這個代理類上新增自己的方法來實現額外的服務,比如統計帖子的瀏覽次數,記錄使用者的登入情況等等。還有一個很常見的代理模式的使用例子就是對大幅圖片瀏覽的控制。”

小A:“當我們在網站上面瀏覽圖文的資訊時,圖片位置放置的是經過縮小的,當有人要詳細的檢視這個圖片時,可以透過點選圖片來啟用一個連結,在一個新的網頁開啟要看的圖片。”

大B:“嗯。對。這樣對於提高瀏覽速度是很有好處的,因為不是每個人都要去看詳細圖上的資訊。”

小A:“是嗎?”

大B:“這種情況就可以使用代理模式來全面實現。這裡我將思路表述出來,至於實現就不表述了,至於這種方式在B/S模式下的真實可行性,只是憑空的想象。如果不是可行的方式,那這個例子可以放到一個C/S下來實現,這個是絕對沒有問題的。我們在瀏覽器中訪問網頁時是呼叫的不是真實的裝載圖片的方法,而是在代理物件中的方法,在這個物件中,先使用一個執行緒向瀏覽器裝載了一個縮小版的圖片,而在後臺使用另一個執行緒來呼叫真實的裝載大圖片的方法將圖片載入到本地,當要瀏覽這個圖片的時候,將其在新的網頁中顯示出來。當然如果在想瀏覽的時候圖片尚未載入成功,可以再啟動一個執行緒來顯示提示資訊,直到載入成功。這樣代理模式的功能就在上面體現的淋漓盡致——透過代理來將真實圖片的載入放到後臺來操作,使其不影響前臺的瀏覽。代理模式能夠協調呼叫者和被呼叫者,能夠在一定程度上降低系統的耦合度。不過一定要記住前面講的使用代理模式的條件,不然的話使用了代理模式不但不會有好的效果,說不定還會出問題的。”

推薦小說