設計模式——命令模式實現撤銷

ztysmile發表於2020-12-13

總結一下工作中用到的這個設計模式,,看了下大話設計模式裡好像也有這個,,以後看到了在完善吧,,現在這個是專案要求實現一個撤銷功能,就跟我說用命令模式寫就行~聽簡單的~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);
	}
}

 

當時是還有一個恢復功能,其實跟撤銷一樣的原理,你們肯定能自己寫出來的!!!(絕不是因為我懶不想寫)

 

相關文章