PureMVC 观察者模式

 

 


 

1  创建ActionFacade的实例_facadeActionFacadeFaçade的实现类,并注册相关的Command,如在观察者模式讲到的,把相关的Command封装到Observer中,并注册到View内,其响应的通知名称为“login

override protected function initializeController( ) : void

        {

            super.initializeController();     

            registerCommand( STARTUP, StratCommand );

            this.registerCommand( LOGIN, LoginCommand );

        }

2  调用_facade.login(user)

public function login( user:UserVo ):void

        {

               sendNotification( LOGIN, user );

        }

3  实际上是调用父类FaçadesendNotification方法

public function sendNotification( notificationName:String, body:Object=null, type:String=null ):void

 {

      notifyObservers( new Notification( notificationName, body, type ) );

 }

Façade方法notifyObservers

public function notifyObservers ( notification:INotification ):void {

             if ( view != null ) view.notifyObservers( notification );

}

也就是说要调用ViewnotifyObservers方法

4  ViewnotifyObservers方法如下,遍历所有关注这个通知(名称)的Observer,依次执行这些ObservernotifyObserver方法。

    public function notifyObservers( notification:INotification ) : void

   {

                     if( observerMap[ notification.getName() ] != null ) {

                            var observers:Array = observerMap[ notification.getName() ] as Array;

                            for (var i:Number = 0; i < observers.length; i++) {

                                   var observer:IObserver = observers[ i ] as IObserver;

                                   observer.notifyObserver( notification );

                            }

                     }

    }

5  下面来看ObservernotifyObserver方法

public function notifyObserver( notification:INotification ):void

              {

                     this.getNotifyMethod().apply(this.getNotifyContext(),[notification]);

              }

这个方法很简单,获取这个Observer封装的响应通知的方法(如exectue()),并把对应的上下文(如Controller),和通知作为参数来执行,呵呵!很像java中的反射机制。

6  如在观察者模式的应用中讲到的,执行了ControllerexecuteCommand方法,从而遍历Command数组,找到响应这个通知的Command(如LoginCommand),并执行这个Commandexectue方法。

 

你可能感兴趣的:(观察者模式)