备忘录模式实例

发起者(需要保存状态的对象)-》创建备忘录给-》备忘录管理者保存

发起者(需要恢复状态的对象)=》通过备忘录管理者-》获取到指定的状态

//备忘录
using UnityEngine;

public class Memento {

    private Vector3 saveV;
    private string name;

    public Memento(Vector3 v)
    {
        saveV = v;
    }

    public Vector3 GetData()
    {
        return saveV;
    }

    public void SetName(string n)
    {
        name = n;
    }
}
//发起者
using UnityEngine;

public class Player : MonoBehaviour {

    public void Set(Vector3 v)
    {
        this.transform.position = v;
    }

    public Memento SaveToMemento()
    {
        Debug.Log("保存当前位置");
        return new Memento((Vector3)transform.position);
    }

    public void RestoreFromMemento(Memento m)
    {
        Debug.Log("恢复到位置:" + m.GetData());
        transform.position = m.GetData();
    }

}
//备忘录管理者
using System.Collections.Generic;
using UnityEngine;

public class MementoManager {

    private Dictionary<string, Memento> dic = new Dictionary<string, Memento>();

    public void AddMemento(string name,Memento m)
    {
        if (!dic.ContainsKey(name))
            dic.Add(name, m);
    }

    public Memento GetMomento(string name)
    {
        if (dic.ContainsKey(name))
            return dic[name];

        return null;
    }
	
}
//测试使用
using UnityEngine;

public class testMemento : MonoBehaviour {
	void Start () {
        Player player = this.GetComponent<Player>();
        MementoManager manager = new MementoManager();
        manager.AddMemento("o",player.SaveToMemento());

        player.Set(new Vector3(10, 3, 5));
        player.RestoreFromMemento(manager.GetMomento("o"));
	}
}

首页 我的博客
粤ICP备17103704号