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