QFramework Architecture:Command模块案例

在这个例子中,我们将使用 ICommand 和 AbstractCommand 来创建一个具体的命令类,这个命令类将用于处理游戏中的玩家得分更新。这个命令将负责接收一个分数值,更新 ScoreModel 中的分数,并可能触发其他系统的响应。
首先,定义一个具体的命令类 UpdateScoreCommand,它继承自 AbstractCommand 并实现必要的抽象方法 OnExecute。

public class UpdateScoreCommand : AbstractCommand
{
    private int scoreToAdd;

    public UpdateScoreCommand(int score)
    {
        scoreToAdd = score;
    }

    // 执行命令的具体逻辑
    protected override void OnExecute()
    {
        // 获取ScoreModel实例
        var scoreModel = GetArchitecture().GetModel<ScoreModel>();
        if (scoreModel != null)
        {
            // 更新分数
            scoreModel.Score += scoreToAdd;
            Console.WriteLine("Score updated to: " + scoreModel.Score);
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        // 初始化架构和模型
        var architecture = GameArchitecture.Interface;
        architecture.RegisterModel(new ScoreModel());
        var scoreModel = architecture.GetModel<ScoreModel>();
        scoreModel.Init();

        // 注册分数改变事件
        architecture.RegisterEvent<ScoreChangedEvent>(e => Console.WriteLine("Score changed to: " + e.NewScore));

        // 创建并执行命令
        var updateScoreCommand = new UpdateScoreCommand(10);
        architecture.SendCommand(updateScoreCommand);

        // 再次更新分数
        updateScoreCommand = new UpdateScoreCommand(5);
        architecture.SendCommand(updateScoreCommand);

        // 清理
        scoreModel.Deinit();
    }
}

在这个例子中,UpdateScoreCommand 负责接收一个分数值,并将其添加到当前的分数中。这种命令的使用使得游戏逻辑更加模块化和可维护,同时也方便了单元测试和功能扩展。通过命令模式,我们可以将请求或简单操作封装为一个对象,从而使得用户可以使用不同的请求、队列或日志来参数化其他对象,同时支持撤销操作

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值