zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    AB测试原理及样本量计算的Python实现
    数据分析-A/B test
    数据分析-分类分析
    数据分析-漏斗模型(AARRR模型)
    置信区间的I型错误和II型错误
    tableau 计算字段
    tableau数据分层、数据组、数据集
    tableau 地图
    tableau 进阶
    tableau 基础
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/4230851.html
Copyright © 2011-2022 走看看