但是我還是習慣自己整理一下筆記來釐清觀念
PureMVC 的目的就是實踐 MVC 設計模式,把程式分成Model、View、Controller 三個部份,當然裡面還實作了 GoF 設計模式:可復用物件導向軟體的基礎裡面的其他設計模式(代理模式, 命令模式, 觀察者模式, 外觀模式, 單例模式, 工廠方法模式, 中介者模式...等)
Model (負責轉發請求,對請求進行處理) --> Proxy
View (使用者介面) --> Mediator
Controller(資料管理或實作演算法) --> Command
Facade (實做外觀模式,使用單一類別作為MVC三者溝通之用)
而溝通則使用 Notification (實做觀查者模式),不使用 Flash 的 Event 機制,以便移植到其他語言
Notification 可以被用來觸發 Command 的執行
Facade, Proxy, Mediator, Command 大家都可以 sendNotification
而 Facade 跟 Proxy 不會接收 Notification
以下針對個別部份進行詳細說明:( Standard 版本)
Facade
Package:org.puremvc.as3.patterns.facade
是 IFacade 的單例實作
Facade 的功能有:
初始化 Model, View, Controller 的單例類別並提供所有方法
對主程式註冊 Command 的地方
主要 public 方法有:
getInstance():IFacade
//建立並發送 INotification.
sendNotification(notificationName:String, body:Object = null, type:String = null):void
//取得 MediatorretrieveMediator(mediatorName:String):IMediator
//取得 ProxyretrieveProxy(proxyName:String):IProxy
//註冊 Command, Mediator, Proxy
registerCommand(notificationName:String, commandClassRef:Class):void
registerMediator(mediator:IMediator):void
registerProxy(proxy:IProxy):void
registerMediator(mediator:IMediator):void
registerProxy(proxy:IProxy):void
//移除 Command, Mediator, Proxy
removeCommand(notificationName:String):void
removeMediator(mediatorName:String):IMediator
removeProxy(proxyName:String):IProxy
removeMediator(mediatorName:String):IMediator
removeProxy(proxyName:String):IProxy
//檢查 Command, Mediator, Proxy 是否已註冊
hasCommand(notificationName:String):Boolean
hasMediator(mediatorName:String):Boolean
hasProxy(proxyName:String):Boolean
hasMediator(mediatorName:String):Boolean
hasProxy(proxyName:String):Boolean
Protected 屬性及方法有:
instance : IFacade [static]
model : IModel
view : IView
controller : IController
//初始化的方法model : IModel
view : IView
controller : IController
initializeFacade():void
initializeModel():void
initializeView():void
initializeController():void
initializeModel():void
initializeView():void
initializeController():void
Facade 的範例 ApplicationFacade.as:
package com.me.myapp{ //import import com.me.myapp.view.*; import com.me.myapp.model.*; import com.me.myapp.controller.*; import org.puremvc.as3.interfaces.*; import org.puremvc.as3..patterns.facade.*; // 繼承 Façade, 實作 IFacade public class ApplicationFacade extends Façade implements IFacade{ // 為 Notification 定義常數 public static const STARTUP:String = "startup"; public static const LOGIN:String = "login"; // 用以取得單一實體的工廠方法 public static function getInstance() : ApplicationFacade{ if ( instance == null ) instance = new ApplicationFacade(); return instance as ApplicationFacade; } // 初始化 Controller,註冊 Command (建立 Notification 與 Command 的對應關係) override protected function initializeController( ):void{ super.initializeController(); registerCommand( STARTUP, StartupCommand ); registerCommand( LOGIN, LoginCommand ); registerCommand( LoginProxy.LOGIN_SUCCESS, GetPrefsCommand ); } /** 建立一個 startup 方法把應用程式作為參數傳入 * 並發出 Notification 將它送到已註冊的 StartupCommand */ public function startup( app:MyApp ):void{ sendNotification( STARTUP, app ); } } }
整理到這邊好像篇幅差不多了
下一篇繼續來看 Proxy, Mediator, Command, 還有 Notification
沒有留言:
張貼留言