设计模式---命令模式(DesignPattern_Command)

简介: DesignPattern_Command摘录自:设计模式与游戏完美开发十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product...

DesignPattern_Command

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。

工程GitHub

COMMAND—俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小气,才请我吃面。”,:-(

  • 命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

源码注释及命名有所更改,个人感觉会比原版更好理解

using UnityEngine;
using System.Collections.Generic;

namespace DesignPattern_Command
{
    // 执行命令基类
    public abstract class Command
    {
        public abstract void Execute();
    }

    // 将命令与Receiver1结合
    public class ConcreteCommand1 : Command
    {
        Receiver1 m_Receiver = null;
        string m_Command = "";

        public ConcreteCommand1(Receiver1 Receiver, string Command)
        {
            m_Receiver = Receiver;
            m_Command = Command;
        }

        public override void Execute()
        {
            m_Receiver.Action(m_Command);
        }
    }

    // 将命令与Receiver2结合
    public class ConcreteCommand2 : Command
    {
        Receiver2 m_Receiver = null;
        int m_Param = 0;

        public ConcreteCommand2(Receiver2 Receiver, int Param)
        {
            m_Receiver = Receiver;
            m_Param = Param;
        }

        public override void Execute()
        {
            m_Receiver.Action(m_Param);
        }
    }

    // 负责执行命令1
    public class Receiver1
    {
        public Receiver1() { }
        public void Action(string Command)
        {
            Debug.Log("Receiver1.Action:Command[" + Command + "]");
        }
    }

    // 负责执行命令1
    public class Receiver2
    {
        public Receiver2() { }
        public void Action(int Param)
        {
            Debug.Log("Receiver2.Action:Param[" + Param.ToString() + "]");
        }
    }


    // 命令管理者
    public class Invoker
    {
        List<Command> m_Commands = new List<Command>();

        // 加入命令
        public void AddCommand(Command theCommand)
        {
            m_Commands.Add(theCommand);
        }

        // 执行命令
        public void ExecuteCommand()
        {
            // 执行
            foreach (Command theCommand in m_Commands)
                theCommand.Execute();
            // 清空 
            m_Commands.Clear();
        }
    }
}

using UnityEngine;
using System.Collections;
using DesignPattern_Command;

public class CommandTest : MonoBehaviour
{
    void Start()
    {
        UnitTest();
    }

    // 
    void UnitTest()
    {
        Invoker theInvoker = new Invoker();

        Command theCommand = null;
        // 将命令与执行结合
        theCommand = new ConcreteCommand1(new Receiver1(), "你好");
        theInvoker.AddCommand(theCommand);
        theCommand = new ConcreteCommand2(new Receiver2(), 999);
        theInvoker.AddCommand(theCommand);

        // 執行
        theInvoker.ExecuteCommand();

    }
}

相关文章
|
4月前
|
设计模式 UED
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
|
4月前
|
设计模式 小程序 Java
Java设计模式【十五】:命令模式
Java设计模式【十五】:命令模式
23 0
|
6月前
|
设计模式 敏捷开发 C++
行为型设计模式07-命令模式
行为型设计模式07-命令模式
20 0
|
6月前
|
设计模式 语音技术
设计模式12 - 命令模式【Command Pattern】
设计模式12 - 命令模式【Command Pattern】
25 0
|
4月前
|
设计模式 存储 Java
认真学习设计模式之命令模式(Command Pattern)
认真学习设计模式之命令模式(Command Pattern)
79 0
|
16天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
21 1
|
1月前
|
设计模式 存储 Java
【设计模式】命令模式
【设计模式】命令模式
|
3月前
|
设计模式 Java
设计模式-命令模式
设计模式-命令模式
33 1
|
3月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
32 0
|
3月前
|
设计模式 存储 Java
Java设计模式-命令模式
命令(Command)模式是指将请求封装成为一个对象,使发出请求和执行请求的责任分割开,方便将命令对象进行存储、传递、调用、增加与管理。 也就是将发送者、接收者和调用命令封装成独立的对象,来供客户端调用。属于行为模式的一种。
29 1
Java设计模式-命令模式