本文主要是介绍设计模式---备忘录模式(DesignPattern_Memento),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘录自:设计模式与游戏完美开发
十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。
工程GitHub
using UnityEngine;
using System.Collections.Generic;namespace DesignPattern_Memento
{// 存放Originator物件的內部狀態public class Memento{string m_State; public string GetState(){return m_State;}public void SetState(string State){m_State = State;}}// 需要儲存內容資訊public class Originator{string m_State; // 狀態,需要被保存public void SetInfo(string State){m_State = State;}public void ShowInfo(){Debug.Log("Originator State:"+m_State);}// 產生要儲存的記錄public Memento CreateMemento(){Memento newMemento = new Memento();newMemento.SetState( m_State );return newMemento;}// 設定要回復的記錄public void SetMemento( Memento m){m_State = m.GetState();}}// 保管所有的Mementopublic class Caretaker{Dictionary<string, Memento> m_Memntos = new Dictionary<string, Memento>();// 增加public void AddMemento(string Version , Memento theMemento){if(m_Memntos.ContainsKey(Version)==false)m_Memntos.Add(Version, theMemento);elsem_Memntos[Version]=theMemento;}// 取回public Memento GetMemento(string Version){if(m_Memntos.ContainsKey(Version)==false)return null;return m_Memntos[Version];}}}
using UnityEngine;
using System.Collections;
using DesignPattern_Memento;public class MementoTest : MonoBehaviour {// Use this for initializationvoid Start () {UnitTest(); UnitTest2();}// void UnitTest () {Originator theOriginator = new Originator();// 設定資訊theOriginator.SetInfo( "Step1" );theOriginator.ShowInfo();// 儲存狀態Memento theMemnto = theOriginator.CreateMemento();// 設定新的資訊theOriginator.SetInfo( "Step2" );theOriginator.ShowInfo();// 復原theOriginator.SetMemento( theMemnto );theOriginator.ShowInfo();}// void UnitTest2 () {Originator theOriginator = new Originator();Caretaker theCaretaker = new Caretaker();// 設定資訊theOriginator.SetInfo( "Version1" );theOriginator.ShowInfo();// 保存theCaretaker.AddMemento("1",theOriginator.CreateMemento());// 設定資訊theOriginator.SetInfo( "Version2" );theOriginator.ShowInfo();// 保存theCaretaker.AddMemento("2",theOriginator.CreateMemento());// 設定資訊theOriginator.SetInfo( "Version3" );theOriginator.ShowInfo();// 保存theCaretaker.AddMemento("3",theOriginator.CreateMemento());// 退回到第2版,theOriginator.SetMemento( theCaretaker.GetMemento("2"));theOriginator.ShowInfo();// 退回到第1版,theOriginator.SetMemento( theCaretaker.GetMemento("1"));theOriginator.ShowInfo();}
}
这篇关于设计模式---备忘录模式(DesignPattern_Memento)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!