2017-01-07 複合模式、代理模式

2017-01-07 複合模式、代理模式


Head First設計模式-複合模式

    Compound Pattern模式,複合模式,一種由模式所構成的模式。如MVC(Model-View-Controller)。

    我們可以創建裝飾者,把目標對象包裝進裝飾者中,給目標對象一些新的行爲。

    裝飾對象的問題就在於:有裝飾纔有效果,沒有裝飾就沒有效果。

    在OO設計的過程中,折中一直都是免不了的。

    採用模式必須考慮這麼做是否有意義。

    MVC,模型和視圖之間的數據流動是由控制器居中協調進行的,兩者之間狀態的改變,數據的同步都是由控制器控制的。

    《Head First設計模式》中模型與視圖之間有交互,但我覺得模型與視圖之間不應該交互,而是應該通過控制器進行交互。

    控制器做的事情不只是有“發送給模型”,還會解讀輸入,並根據輸入操縱模型。

    爲什麼不能把與模型交互的代碼放入視圖中?有兩個原因:首先,這會讓視圖的代碼變得更復雜,因爲這樣一來視圖就有兩個責任,不但要管理用戶界面,還要處理如何控制模型的邏輯。第二個原因,這麼做將造成模型和視圖之間緊耦合,如果你想複用此視圖來處理其他模型,根本不可能。控制器把邏輯從視圖中分離,讓模型和視圖之間解耦。通過保持控制器和視圖之間鬆耦合,設計就更有彈性而且容易擴展。

    策略:視圖和控制器實現了經典的策略模式,視圖是一個對象,可以被調整使用不同的策略,而控制器提供了策略。視圖只關心繫統中的可視部分,對於任何界面行爲,都委託給控制器處理。使用策略模式也可以讓視圖和模型之間的關係解耦,因爲控制器負責和模型交互來傳遞用戶的請求。對於工作是怎麼完成的視圖毫不知情。

    可以用觀察者模式實現模型,當狀態改變時,相關對象將持續更新。使用觀察者模式,可以讓模型完全獨立於視圖和控制器。同一個模型可以使用不同的視圖,甚至可以同時使用多個視圖。

    控制器在中間... …

    控制器位於視圖和模型之間。他將用戶的輸入,傳給模型做動作。


6:Compound(|ˈkɒmpaʊnd| noun 化合物、混合物、組合物 |ˈkɒmpaʊnd|adj) Pattern 

7:MVC:Model-View-Controller

11:子集合:subcollection


12:public、interface、void、implement、simulator、counter、static、abstract factory、iterator、register、observer、report、remote proxy


14:machine |məˈʃiːn|

15:notify |ˈnəʊtɪfaɪ| v 通知

16:remote |rɪˈməʊt| adj 遙遠的 偏遠的

17:asynchronous |eɪˈsɪŋkrənəs| adj 異步的

18:synchronous |ˈsɪŋkrənəs| adjective 同步的


Head First設計模式-代理模式

代理模式:控制和管理訪問

    所謂的代理(proxy),就是代表某個真實的對象。在這個案例中,代理就像是糖果機一樣,但其實幕後它利用網絡和一個遠程的真正糖果機溝通。

    這個代理假裝它是真正的對象,但是其實一切的動作是它利用網絡和真正的對象溝通。

    遠程代理就好比“遠程對象的本地代表(representative |ˌreprɪˈzentətɪv|)”。


    代理模式爲另一個對象提供一個替身或佔位符以控制對這個對象的訪問。

    使用代理模式創建代表(representative)對象,讓代表對象控制某個對象的訪問,被代理的對象可以是遠程的對象、創建開銷大的對象或需要安全控制的對象。

    代理模式有很多變體,幾乎都和“控制訪問”的做法有關。如遠程代理控制訪問遠程對象。虛擬代理控制訪問創建開銷大的資源。保護代理給予權限控制對資源的訪問。

    虛擬代理作爲創建開銷大的對象的代表。虛擬代理經常直到我們真正需要一個對象的時候才創建它。當對象在創建前和創建中時,由虛擬代表來扮演對象的替身。對象創建後,代理就會將請求直接委託給對象。

    可以看出Proxy有時看起來很像裝飾者模式,都是用一個對象把另一個對象包裝起來,滿足一些新的需求。但他們的目的是不一樣的。裝飾者爲對象增加行爲,而代理是控制對象的訪問。

    在ImageProxy的例子中,你總是創建新的ImageProxy來取得圖像,即使圖像已經被取回來。這時可以使用緩存代理(Caching Proxy)。緩存代理維護之前創建的對象,當收到請求時,在可能的情況下返回緩存對象。

    代理和適配器也很想,都是擋在其它對象的前面,並負責將請求轉發給它們。適配器會改變對象適配的接口,而代理實現相同的接口。

    保護代理:根據訪問權限決定客戶可否訪問對象的代理。

    裝飾者:包裝另一個對象,並提供額外的行爲。

    外觀:包裝許多對象以簡化他們的接口。

    代理:包裝另一個對象,並控制對他的訪問。

    適配器:包裝另一個對象,並提供不同的接口。

    防火牆代理(Firewall Proxy)控制網絡資源的訪問,保護主題免於“壞客戶”的侵害。

    智能引用代理(Smart Reference Proxy)當主題被引用時,進行額外的動作,例如計算一個對象被引用的次數。

    緩存代理(Caching Proxy)爲開銷大的運算結果提供暫時存儲:它允許多個客戶共享結果,以減少計算機或網絡延遲。


1:Proxy that stands in(stand in 代替)) for expensive(IkˈspensIv) objects:Virtual proxy.


2:Software developer agent(|ˈeɪdʒənt| n 代理人) was being this kind of proxy:Protection(|prəˈtekʃn|) proxy.


3:Similar(|ˈsɪmɪlə(r)| adj 相似的) to proxy,but with a different purpose(|ˈpɜːpəs| n 目的):decorator.


4:Proxy that protects method calls from unauthorized callers:Protection proxy(unauthorized |ʌnˈɔːθəraɪzd| adj 未經授權的、未經允許的,authorize |ˈɔːθəraɪz| v 批准).


5:Commonly used proxy for web services:web proxy.


8:緩存代理:Caching Proxy

9:防火牆代理:Firewall Proxy

10:智能引用代理:Smart Reference Proxy

13:representative |ˌreprɪˈzentətɪv| adj 典型的 代表制的 n 代表

發佈了180 篇原創文章 · 獲贊 13 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章