PureMVC(AS3)剖析:设计模式(二)
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
[3]???? PureMVC(AS3)剖析:吐槽,http://goo.gl/sDHJU
[4]???? PureMVC(AS3)剖析:設計模式(一),http://goo.gl/xtiOx
總結
以上是生活随笔為你收集整理的PureMVC(AS3)剖析:设计模式(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 微信自动化工具开发系列05
- 下一篇: [随记][asp.net基础]Page_