25.PureMVC的Facade和开始Command

25.PureMVC框架-Facade外观模式和Command命令模式


25.1 知识点

查看示意图Facade和Command是串联框架的重要组成

创建游戏外观脚本来管理整个游戏,继承Facade脚本。单核版本只允许有一个外观对象。

public class GameFacade : Facade
{

}

Facade父类已经存在instance。为了方便我们使用Facade,需要自己写一个单例模式的属性。

// 为了方便我们使用Facade,需要自己写一个单例模式的属性
public static GameFacade Instance
{
    get
    {
        if (instance == null)
        {
            instance = new GameFacade();
        }
        return instance as GameFacade;
    }
}

创建启动命令类,继承SimpleCommand。重写Execute执行命令方法。这个方法会在执行命令时调用。

public class StartUpCommand : SimpleCommand
{
    // 重写里面的执行函数
    public override void Execute(INotification notification)
    {
        base.Execute(notification);
        // 当命令被执行时,就会调用该方法
        // 启动命令中往往是做一些初始化操作
        Debug.Log("123");
    }
}

GameFacade重写InitializeController初始化控制器方法。这里面要写一些关于命令和通知绑定的逻辑。比如绑定启动通知和启动命令。

/// <summary>
/// 初始化控制层相关的内容
/// </summary>
protected override void InitializeController()
{
    base.InitializeController();
    // 这里面要写一些关于命令和通知绑定的逻辑
    RegisterCommand(PureNotification.START_UP, () =>
    {
        return new StartUpCommand();
    });
}

定义启动方法。方法中发送启动通知。这样就会调用启动命令的执行方法。

// 一定是有一个启动函数的
public void StartUp()
{
    // 发送通知
    SendNotification(PureNotification.START_UP);
}

创建主入口脚本,挂着到场景中空物体,测试有没有走到启动命令执行函数中

public class Main : MonoBehaviour
{
    void Start()
    {
        GameFacade.Instance.StartUp();   
    }
}

25.2 知识点代码

GameFacade

using PureMVC.Interfaces;
using PureMVC.Patterns.Facade;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//1.继承PureMVC中Facade脚本
public class GameFacade : Facade
{
    //2.为了方便我们使用Facade 需要自己写一个单例模式的属性
    public static GameFacade Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new GameFacade();
            }
            return instance as GameFacade;
        }
    }

    /// <summary>
    /// 3.初始化 控制层相关的内容
    /// </summary>
    protected override void InitializeController()
    {
        base.InitializeController();
        //这里面要写一些 关于 命令和通知 绑定的逻辑
        RegisterCommand(PureNotification.START_UP, () =>
        {
            return new StartUpCommand();
        });
    }

    //4.一定是有一个启动函数的
    public void StartUp()
    {
        //发送通知
        SendNotification(PureNotification.START_UP);

        //SendNotification(PureNotification.SHOW_PANEL, "MainPanel");
    }
}

StartUpCommand

using PureMVC.Interfaces;
using PureMVC.Patterns.Command;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StartUpCommand : SimpleCommand
{
    //1.继承Command相关的脚本
    //2.重写里面的执行函数
    public override void Execute(INotification notification)
    {
        base.Execute(notification);
        //当命令被执行时 就会调用该方法
        //启动命令中 往往是做一些初始化操作
        Debug.Log("123");
    }

}

Main

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Main : MonoBehaviour
{
    void Start()
    {
        GameFacade.Instance.StartUp();   
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏