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;

转载于:https://www.cnblogs.com/ZhouXiHong/p/4230851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值