一 · 概述
1.系游戏编程模式中命令模式一节笔记
2.在unity下实现该模式,其应具有撤回,重做,重放等功能
二 · 命令模式简述
(一):
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作[1]。
要点
-
将一组行为抽象为对象,这个对象和其他对象一样可以被存储和传递,从而实现行为请求者与行为实现者之间的松耦合,这就是命令模式。
-
命令模式是回调机制的面向对象版本。
-
命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
-
命令模式的优点有:对类间解耦、可扩展性强、易于命令的组合维护、易于与其他模式结合,而缺点是会导致类的膨胀。
-
命令模式有不少的细分种类,实际使用时应根据当前所需来找到合适的设计方式。
使用场合
-
命令模式很适合实现诸如撤消,重做,回放,时间倒流之类的功能。
-
基于命令模式实现录像与回放等功能,也就是执行并解析一系列经过预录制的序列化后的各玩家操作的有序命令集合。
引申与参考
-
最终我们可能会得到很多不同的命令类。为了更容易实现这些类,定义一个具体的基类,包含一些能定义行为的高层方法,往往会有帮助。可以将命令的主体execute()转到子类沙箱中。
-
对象可以响应命令,或者将命令交给它的从属对象。如果我们这样实现了,就完成了一个职责链模式。
-
对于等价的实例,可以用享元模式提高内存利用率。
ps:http://blog.csdn.net/poem_qianmo/article/details/53240330* 以上来自浅墨毛星云的分析,希望在编写实例中理解。*
(二):
命令是具现化的方法调用[1]。
在某些语言中的反射允许你在程序运行时命令式地和类型交互。 你可以获得类的 类型对象,可以与其交互看看这个类型能做什么。换言之,反射是具现化类型的 系统。[1] 命令模式是一种回调的面向对象实现[1]
①即在函数中传入对象,并调用对象中的方法(具现化的方法,方法调用被存储在对象中)。
②类似“回调”,“第一公民函数”,“函数指针”,“闭包”,“偏函数”,区别在于使用了对象中的方法。
三 · unity实现
简述:
使用一个可阶段移动和可变色的小球,来体现命令模式;
(1)添加小球及跟随移动的摄像头,简单测试功能
相关脚本
镜头跟随:
public Transform playertransform;
public Vector3 offest;
// Use this for initialization
void Start () {
//计算偏移量
offest = transform.position - playertransform.position;
}
// Update is called once per frame
void Update () {
//设置摄像坐标
transform.position = playertransform.position + offest;
}