• pureMVC学习之一


    //1
    var
      MainWindow: TMainWindow;
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TMainWindow, MainWindow);
      ApplicationFacade.Startup(MainWindow);            
      Application.Run;
    end.

    //2
    function ApplicationFacade: IApplicationFacade;
    begin
      Result := (TApplicationFacade.Instance as IApplicationFacade)
    end;

    //3
    procedure TFacade.InitializeFacade;
    begin
      InitializeModel;
      InitializeController;
      InitializeView;
    end;

    //4 TApplicationFacade 调用父类的注册命令方法
    procedure TApplicationFacade.InitializeController();
    begin
      /// call inherited to use the PureMVC Controller Singleton.
      inherited;
      /// Otherwise, if you're implmenting your own
      /// IController, then instead do:
      /// if Assigned(FController) then Exit;
      /// FController = MyAppController.getInstance;

      /// do any special subclass initialization here
      /// such as registering Commands
      RegisterCommand(MSG.Startup, TStartupCommand);
      RegisterCommand(MSG.DELETE_USER, TDeleteUserCommand);
      RegisterCommand(MSG.ADD_ROLE_RESULT, TAddRoleResultCommand);
    end;

    //5 TFacade 调用控制器注册命令方法
    procedure TFacade.RegisterCommand(NotificationName: string;
        CommandClass: TClass);
    begin
      FController.RegisterCommand(NotificationName, CommandClass);
    end;


    procedure TController.RegisterCommand(NotificationName: string; CommandType: TClass);
    begin
      Assert(CommandType.InheritsFrom(TCommand));//是否继承自TCommand
      TMonitor.Enter(FSyncRoot);
      try
        if FCommandMap.ContainsKey(NotificationName) then Exit;//注册过的命令则放弃

        // This call needs to be monitored carefully. Have to make sure that RegisterObserver
        // doesn't call back into the controller, or a dead lock could happen.

        FView.RegisterObserver(NotificationName, TObserver.Create('ExecuteCommand', Self));//视图注册观察者,收到此消息时即可调用消息对应的命类的执行方法
        FCommandMap.Add(NotificationName, TCommandClass(CommandType));//控制器命令列表中增加新命令

      finally
        TMonitor.Exit(FSyncRoot);
      end;
    end;

  • 相关阅读:
    UVA 10935 约瑟夫环
    分拆素数和 埃氏筛法
    POJ 2349 Prim
    POJ 2031 prim
    POJ 1861 Kruskal
    POJ 2395 Prim
    POJ 1751 Prim
    POJ 2421 Prim
    vuejs开发环境搭建及热更新
    vuejs介绍
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/4230851.html
Copyright © 2020-2023  润新知