设计模式_备忘录模式

备忘录模式

介绍

设计模式 定义 案例 问题堆积在哪里 解决办法
备忘录模式 行为型模式,
保存了数据某一个时间点的状态
在需要的时候进行回档
单机游戏的角色
数据保存并且回档
保存和回档 加一个状态管理类

类图

设计模式_备忘录模式_第1张图片

代码

MomentData

using UnityEngine;

public class MomentData
{
    public string roleName;
    public int HP;
    public int MP;
    public Vector3 rolePos = Vector3.zero;

    MomentData() { }

    public MomentData(MomentData m)
    {
        this.roleName = m.roleName;
        this.HP = m.HP;
        this.MP = m.MP;
        this.rolePos = m.rolePos;
    }

    public MomentData(string roleName, int HP, int MP, Vector3 rolePos)
    {
        SetData(roleName, HP, MP, rolePos);
    }

    public void SetData(string roleName, int HP, int MP, Vector3 rolePos)
    {
        this.roleName = roleName;
        this.HP = HP;
        this.MP = MP;
        this.rolePos = rolePos; 
    }

    // 被攻击
    public void BeAttack()
    {
        HP--;
    }
}

Momento

using System.Collections.Generic;

public class Momento
{
    // 保存数据集合
    Dictionary dic = new Dictionary();

    // 保存
    public void Save(string key, MomentData data)
    {
        MomentData newdata = new MomentData(data);

        dic.Add(key, newdata);
    }

    // 加载
    public MomentData Load(string key, MomentData data)
    {
        if (dic.ContainsKey(key))
        {
            MomentData old = dic[key];
            data.roleName  = old.roleName;
            data.HP        = old.HP;
            data.MP        = old.MP;
            data.rolePos   = old.rolePos;

        }
        return null;
    }
}

测试代码

using UnityEngine;

public class TestBWL : MonoBehaviour
{
    void Start()
    {
        Momento m = new Momento();
        MomentData data = new MomentData("王者", 100, 80, Vector3.zero);

        // 打boss前保存
        m.Save("打boss前", data);

        // 被攻击
        for (int i = 0; i < 99; i++)
        {
            data.BeAttack();
        }
        Debug.Log(data.roleName + " 当前血量: " + data.HP);

        // 使用回档技能
        m.Load("打boss前", data);
        Debug.Log(data.roleName + " 回档后血量: " + data.HP);
    }
}

结果

总结

这个模式比较简单 ,做个容器保存“状态数据”,然后再包一层方便使用。

你可能感兴趣的:(设计模式,设计模式,备忘录模式)