• 设计模式のMementoPattern(备忘录模式)----行为模式


    一、产生背景

    意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

    主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

    何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃。

    二、实现方式

    • 发起人角色:记录当前时刻的内部状态,负责创建和恢复备忘录数据。
    • 备忘录角色:负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态。
    • 管理者角色:负责保存备忘录对象。

    三、实例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MementoPattern
    {
        //备忘录模式
        class Program
        {
            static void Main(string[] args)
            {
    
                Originator o = new Originator();
                o.State = "On";
    
                Caretaker c = new Caretaker();
                c.Memento = o.CreateMemento();
    
                o.State = "Off";
                o.SetMemento(c.Memento);
    
                Console.ReadLine();
            }
        }
    
        public class Memento
        {
            private string _state;
    
            public Memento(string state)
            {
                this._state = state;
            }
    
            public string State
            {
                get { return _state; }
            }
        }
    
        public class Originator
        {
            private string _state;
    
            public string State
            {
                get
                {
                    return _state;
                }
                set
                {
                    _state = value;
                    Console.WriteLine("State = " + _state);
                }
            }
    
            public Memento CreateMemento()
            {
                return (new Memento(_state));
            }
    
            public void SetMemento(Memento memento)
            {
                Console.WriteLine("Restoring state...");
                State = memento.State;
            }
        }
    
        public class Caretaker
        {
            private Memento _memento;
    
            public Memento Memento
            {
                get
                {
                    return _memento;
                }
                set
                {
                    _memento = value;
                }
            }
        }
    
    }

    四、模式分析

    优点: 1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。

    缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

  • 相关阅读:
    vue的nuxt框架中使用vue-video-player
    多线程学习笔记-1
    Java模拟简单的KFC程序
    Hankson最大公约数最小公倍数的“逆问题”
    C语言实现三天打鱼两天晒网
    关于border-color的一些小问题
    CSS的超链接样式设计
    CSS ID选择器&通配选择器
    CSS标签选择器&类选择器
    CSS布局属性
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/8744963.html
Copyright © 2020-2023  润新知