PureMVC(AS3)剖析:設計模式(二)
模式 |
上一篇中介紹了PureMVC中使用的3種設計模式:單例模式、觀察者模式、外觀模式。本篇將繼續介紹剩下的3種設計模式:
l 使用中介者(Mediator)模式來封裝UI與系統中其他對象的交互,使得各對象不需要顯示地互相引用,從而使得其耦合松散,而且可以獨立地改變它們之間的交互;
l 使用代理(Proxy)模式為數據對象提供代理以控制數據對象的訪問,PureMVC中Proxy負責操作數據模型,與遠程服務信存取數據;
l 使用命令(Command)模式將請求封裝為一個對象,實現“行為請求者”與“行為實現者”解耦將發出命令的責任和執行命令的責任分割開。
1. 中介者模式
中介者(Mediator)模式:用一個中介對象來封裝一系列對象交互。中介者使各對象不需要相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。適用性:(摘自:《設計模式:可復用面向對象軟件的基礎》)
l 一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。
l 一個對象引用其他很多對象並且直接與這些對象通信,導致難以復用該對象。
l 想定制一個分布在多個類中的行為,而又不想生成太多的子類。
在PureMVC中,Mediator幫助我們創建或重用已有UI組件,而UI不用知道PureMVC框架相關的東西,UI僅用於顯示數據、接收用戶輸入。Mediator是UI組件與框架的中介,它負責將來自PureMVC框架的消息轉接到UI,並將UI的消息(flash事件)轉發廣播到PureMVC框架。這樣通過Mediator解耦了UI與PureMVC框架元素(Proxy、Mediator、Command),而不用互相引用。
圖:中介者模式
一個Mediator只與一個UI綁定(1對1),Mediator構造函數參數傳遞與之綁定的UI。通過façade的registerMediator方法注冊Mediator,以接收PureMVC框架的通知(通過上篇介紹的外觀模式,可以知道其實最終是通過View這個單例來注冊的,façade只是提供接口)。
圖:Mediator與UI的關系
2. 代理模式
代理(Proxy)模式:為其它的對象提供一種代理,以控制對這個對象的訪問。按照使用目的來划分,代理有以下幾種:(摘自:《設計模式:可復用面向對象軟件的基礎》)
l 遠程(Remote)代理:為一個位於不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是在本機器中,也可是在另一台機器中。遠程代理又叫做大使(Ambassador)。
l 虛擬(Virtual)代理:根據需要創建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創建。
l Copy-on-Write代理:虛擬代理的一種。把復制(克隆)拖延到只有在客戶端需要時,才真正采取行動。
l 保護(Protect or Access)代理:控制對一個對象的訪問,如果需要,可以給不同的用戶提供不同級別的使用權限。
l Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。
l 防火牆(Firewall)代理:保護目標,不讓惡意用戶接近。
l 同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。
l 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數記錄下來等。
在所有種類的代理模式中,虛擬(Virtual)代理、遠程(Remote)代理、智能引用代理(Smart Reference Proxy)和保護(Protect or Access)代理是最為常見的代理模式。
在PureMVC中,Proxy幫助我們以更易於重用、修改對應用程序影響最小的方式暴露數據結構、接口給應用程序。Proxy可能只是簡單的管理本地數據對象,以同步方式獲取或修改數據;也可能是遠程服務器數據,以異步方式操作數據,服務器數據返回之后以Notification方式告訴應用程序。
總之,Proxy 集中程序的Domain Logic(域邏輯),並對外公布操作數據對象的 API。它封裝了所有對數據模型的操作,不管數據是客戶端還是服務器端的,對程序其他部分來說就是數據的訪問是同步還是異步的。
圖:Proxy模式
3. 命令模式
命令(Command)模式:又稱為行動(Action)模式或交易(Transaction)模式,命令模式把一個請求或者操作封裝到一個對象中。命令模式允許系統使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。(摘自:《設計模式:可復用面向對象軟件的基礎》)
命令模式是對命令的封裝,把發出命令的責任和執行命令的責任分割開,委派給不同的對象。每一個命令都是一個操作:請求的一方發出請求要求執行一個操作;接收的一方收到請求,並執行操作。命令模式允許請求的一方和接收的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否被執行、何時被執行,以及是怎么被執行的。
圖:PureMVC中命令執行時序
在PureMVC中,命令用來檢索、操作Proxy,或者與Mediator通信,或者執行其它命令(符合命令)。命令有兩種:SimpleCommand、MacroCommand,分別用於執行單個任務、多個任務。MacroCommand可以順序其實多個SimpleCommand。
圖:簡單命令與復合命令
命令模式優點:(http://baike.baidu.com/view/1963264.htm)
l 降低對象之間的耦合度。
l 新的命令可以很容易地加入到系統中。
l 可以比較容易地設計一個組合命令。
l 調用同一方法實現不同的功能
命令模式缺點:
使用命令模式可能會導致某些系統有過多的具體命令類。因為針對每一個命令都需要設計一個具體命令類,因此系統可能需要大量具體命令類,這將影響命令模式的使用。
相關文章
[1] PureMVC(AS3)剖析:開篇,http://goo.gl/uqUV4
[2] PureMVC(AS3)剖析:實例,http://goo.gl/UqnQh