设计模式---备忘录模式(DesignPattern_Memento)

简介: 摘录自:设计模式与游戏完美开发十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity T...

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、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();
        }
    }

    // 保管所有的Memento
    public 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);
            else
                m_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 initialization
    void 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();


        
    }
}

相关文章
|
设计模式 存储 Java
23种设计模式,备忘录模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】备忘录模式是一种行为设计模式,它能在不破坏对象封装的前提下,捕获并保存对象的当前状态,以便后面可以恢复到这个状态。
403 0
|
设计模式 存储 Java
【设计模式】备忘录模式
【设计模式】备忘录模式
245 0
|
设计模式 存储 Java
浅谈设计模式 - 备忘录模式(十五)
浅谈设计模式 - 备忘录模式(十五)
162 0
|
设计模式 存储 Java
Java设计模式【十九】:备忘录模式
Java设计模式【十九】:备忘录模式
149 0
|
设计模式 存储 Java
【设计模式】【行为型模式】备忘录模式(Memento)
一、入门 什么是备忘录模式? 备忘录模式(Memento Pattern)是一种行为设计模式,用于在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便在需要时恢复该状态。它通常用于实现撤销操作
445 8
|
设计模式 存储 Java
【再谈设计模式】备忘录模式~对象状态的守护者
备忘录模式属于行为型设计模式。它的主要目的是在不破坏对象封装性的前提下,捕获并外部化一个对象的内部状态,以便之后可以将该对象恢复到这个状态。原发器(Originator):创建一个备忘录,用于记录当前时刻它的内部状态。原发器还可以使用备忘录来恢复其内部状态。备忘录(Memento):存储原发器对象的内部状态。备忘录应该防止原发器以外的其他对象访问其内部状态。负责人(Caretaker):负责保存备忘录,但不能对备忘录的内容进行操作或检查。
538 82
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
270 4
|
存储 设计模式 安全
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
备忘录模式是一种行为设计模式,允许在不破坏对象封装性的情况下保存和恢复对象的内部状态。该模式通过创建备忘录对象来存储发起人的状态信息,发起人可根据需要创建和恢复备忘录。管理者则负责保存和管理备忘录,但无法访问其内容。备忘录模式简化了状态管理,支持撤销操作和历史记录功能,提高了系统的灵活性和可用性。在实际应用中,备忘录模式常用于文本编辑器、游戏和数据库事务处理等场景,确保对象状态的安全恢复和有效管理。通过备忘录模式,开发人员可以更好地控制对象状态的变化,提升软件系统的健壮性和用户体验。
542 1
探索设计模式的魅力:备忘录模式揭秘-实现时光回溯、一键还原、后悔药、历史的守护者和穿越时空隧道
|
设计模式
备忘录模式-大话设计模式
备忘录模式-大话设计模式
213 1
|
设计模式 算法
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
设计模式的基础问题之备忘录模式在软件开发的问题如何解决
181 0