gof-命令模式入门解读

谁说胖子不能爱 提交于 2019-11-26 17:46:46

命令模式:将回调方法对象化

应用场景:规范回调方式,调用方式 比如MVC中的观察者回调皆为命令对象

谈一点小经验:

在设计命令时将命令中参数尽可能的放在构造中传入 避免出现 void Execute(params T)这种尴尬局面

在一些动态语言中可以使用的闭包的 一个最外层的upvalue直接当作一个命令对象使用 但是当闭包内方法过于复杂时还是封装为具体的命令对象比较简洁

有些不用记录状态的命令可以实例一次无限复用 比如推箱子 方向移动一条命令不需要记录状态 而有些具有撤销操作的命令需要记录这条命令的状态 方便做撤销操作

public interface ICommand {
    void Execute();
    void Execute(PlayerActor actor);  //<-尽量不要出现在命令中传参这种局面  命令中枢非常难运维
}

public class HideCommand : ICommand
{
    HideCommand(GameObject obj,Transform pos) {//<-一条命令的参数在这里传入

    }
    public void Execute()
    {
        throw new System.NotImplementedException();
    }

    public void Execute(PlayerActor actor)//<-错误示范
    {
        throw new System.NotImplementedException();
    }
}

 

为什么说闭包机制适合作为命令   可以看到 upvalue就是一个可以记录内部操作和内部数据的容器  天然的命令条例哈哈 lua例子:

function foo ()
  local a, b, c, d
  local f1 = function () return d + b end
  local f2 = function () return f1() + a end
  return f1,f2
end 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!