设计模式—命令模式实现撤销
程序员文章站
2022-06-19 14:46:22
总结一下工作中用到的这个设计模式,,看了下大话设计模式里好像也有这个,,以后看到了在完善吧,,现在这个是项目要求实现一个撤销功能,就跟我说用命令模式写就行~听简单的~QAQ然后看了很多关于命令模式的博客,感觉我写的应该差不多吧,,应该没有理解错,直接放代码public class 命令模式 : MonoBehaviour{CommandManager comdMag = new CommandManager();public int TestValue = 0;// Start is...
总结一下工作中用到的这个设计模式,,看了下大话设计模式里好像也有这个,,以后看到了在完善吧,,现在这个是项目要求实现一个撤销功能,就跟我说用命令模式写就行~听简单的~QAQ
然后看了很多关于命令模式的博客,感觉我写的应该差不多吧,,应该没有理解错,直接放代码
public class 命令模式 : MonoBehaviour
{
CommandManager comdMag = new CommandManager();
public int TestValue = 0;
// Start is called before the first frame update
void Start()
{
TestCommand testCommand = new TestCommand(TestValue);
comdMag.Excute(testCommand);
comdMag.Undo();
}
}
public interface ICommand
{
void Excute();
void Udon();
}
public class CommandManager
{
//这里用Stack比较方便,但是Stack不知道怎么限制数量,,还得从头部去掉一个
public List<ICommand> comList = new List<ICommand>();
public void Excute(ICommand comd)
{
comd.Excute();
comList.Add(comd);
}
public void Undo()
{
var lastComd = comList[comList.Count - 1];
lastComd.Udon();
comList.RemoveAt(comList.Count - 1);
}
}
public class TestCommand : ICommand
{
int value;
public TestCommand(int value)
{
this.value = value;
}
public void Excute()
{
value = 10;
Debug.Log(value);
}
public void Udon()
{
value = 0;
Debug.Log(value);
}
}
当时是还有一个恢复功能,其实跟撤销一样的原理,你们肯定能自己写出来的!!!(绝不是因为我懒不想写)
本文地址:https://blog.csdn.net/ztysmile/article/details/111088187