【unity】命令模式

引子

为什么需要命令模式?
开发时,我们可能遇到某些特殊的需求,比如对某些步骤进行记录、撤销等。这种情况下,我们可以使用命令模式,将请求封装成对象,实现"行为请求者"与"行为实现者"之间的松耦合。

什么是命令模式

将一个请求封装为一个对象(命令),使发出命令与执行命令的类分开。

实现

定义一个命令的抽象基类 BaseOrder

public abstract class BaseOrder { public abstract void Execute(); }

编写一些命令类,使其继承于 BaseOrder

Attack类

using UnityEngine; public class Attack : BaseOrder { public override void Execute() { Debug.Log("Player enter attack state"); } }

Defense类

using UnityEngine; public class Defense : BaseOrder { public override void Execute() { Debug.Log("Player enter defense state"); } }

编写命令发送类 Sender

using UnityEngine; public class Sender : MonoBehaviour { public Receiver receiver; private void Update() { SendOrders(); } private void SendOrders() { if(Input.GetKeyDown(KeyCode.A)) receiver.ReceiveSingleOrder(new Attack()); if(Input.GetKeyDown(KeyCode.D)) receiver.ReceiveSingleOrder(new Defense()); } }

编写命令接收类 Receiver ,我这里创建了一个队列,用于按顺序存放 Sender 发送的命令,在必要时依次出队列并执行命令

using System.Collections.Generic; using UnityEngine; public class Receiver : MonoBehaviour { private Queue<BaseOrder> orders = new Queue<BaseOrder>(); private void Update() { ExecuteSingleOrder(); } public void ReceiveSingleOrder(BaseOrder o) { orders.Enqueue(o); } public void ExecuteSingleOrder() { if(Input.GetKeyDown(KeyCode.E)) orders.Dequeue().Execute(); } }

运行后,依次按下AAD发送命令,再按下EEE依次执行,结果如下
image

优缺点

优点:

  1. 降低了系统的耦合度。
  2. 易于拓展新的命令。

小结

值得一提的是,命令模式尤为契合某些卡牌游戏的需求,采取该模式进行设计开发,可以很大程度上降低开发难度。


__EOF__

本文作者OtusScops
本文链接https://www.cnblogs.com/OtusScops/p/16103549.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   AshScops  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示