Unity Come On

Unity【话大】设计模式之备忘录模式

2019-02-04  本文已影响31人  su9257_海澜

前言:笔者在最开始写程序的时候经常会遇到一种情况,例如更改一个字段、或者添加一种小功能,就要把原来写过的东西几乎废弃掉,或者更改大量以前写过的代码。又或者自己写的东西时间久了再去回顾,完全找不到到时为什么这么写的头绪,如果遇到了Bug更是无法快速定位在哪里小范围出现的问题。如果你也经常遇到这种问题,就说明你现阶段非常需要学习下设计模式了

在网上经常说的设计模式有23种,也有一些更多的设计模式,无非也是从这些设计模式中变种而来。如果让笔者来形容什么是设计模式,我认为设计模式是:一种思想,一种模式,一种套路,一种解决问题的高效策略



有说的不正确或者不准确的地方欢迎留言指正


有什么有趣的写作技巧或者想法欢迎大家给我留言,大家的帮助是我写下去最有效的动力



备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

比较简单,话不多少,直接上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Custom.Log;

public class Originator
{
    private string state;
    public string State
    {
        get { return state; }
        set { state = value; }
    }

    public Memento CreateMemento()
    {
        return (new Memento(state));
    }

    public void SetMemento(Memento memento)
    {
        state = memento.State;
    }

    public void Show()
    {
        this.Log("State=" + state);
    }
}

public class Memento
{
    private string state;

    public Memento(string state)
    {
        this.state = state;
    }

    public string State
    {
        get { return state; }
    }
}

public class Caretaker
{
    public Dictionary<string, Memento> keyValuePairs = new Dictionary<string, Memento>();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Custom.Log;
public class MementoConponent : MonoBehaviour
{
    void Start()
    {
        Originator originator = new Originator();
        originator.State = "On";
        originator.Show();

        Caretaker caretaker = new Caretaker();
        caretaker.keyValuePairs.Add("版本1", originator.CreateMemento());

        originator.State = "Off";
        originator.Show();

        originator.SetMemento(caretaker.keyValuePairs["版本1"]);
        originator.Show();
    }
}

优点:

缺点:

如果 CreateMemento()函数耗时过长且含有较多的值类型,可以配合原型模式使用。

上一篇下一篇

猜你喜欢

热点阅读