设计模式-备忘录模式

概述

备忘录模式也是一种行为型的设计模式,其主要的功能是存储和撤销的功能,可以恢复之前的状态,在实际的开发中,几乎是必不可少的功能,现在几乎所有的软件都少不了撤销的功能,如果没有撤销,那在误操作后会很麻烦,那如何实现这个功能呢,如果有这方面开发经历的同学肯定想到可以使用栈来存储,将操作都存储在栈中,操作后就入栈,撤销就出栈,这样做当然是可以的,那接下来就结合实际的例子来学习一下这部分的内容该如何编写吧,以下是模拟Word的操作。


例子:模拟Word的操作,在用户使用 加粗,下划线,斜体后使用撤销操作后可以返回之前的操作。

备忘录模式

cs 复制代码
using System.Numerics;
using static POC;

internal class Program
{
    private static void Main(string[] args)
    {
        WordEditor editor = new WordEditor();//创建word编辑器
        Caregiver caregiver = new Caregiver();//创建看护者

        editor.operate = "加粗";
        caregiver.SaveMemoType(editor.Save());
        editor.operate = "下划线";
        caregiver.SaveMemoType(editor.Save());
        editor.operate = "斜体";
        Console.WriteLine($"当前操作:{editor.operate}");
        editor.Restore(caregiver.RestoreMemoType());
        Console.WriteLine($"撤销一次操作:{editor.operate}");
        editor.Restore(caregiver.RestoreMemoType());
        Console.WriteLine($"撤销两次操作:{editor.operate}");
    }
    public class MemoType//备忘录类
    {
        public string operate { get; set; }
        public MemoType(string OP)
        {
            operate = OP;
        }
    }
    public class WordEditor//Word编辑器(发起人)
    {
        public string operate { get; set; }
        public MemoType Save()
        {
            return new MemoType(operate);
        }
        public void Restore(MemoType memoType)
        {
            operate = memoType.operate;
        }
    }
    public class Caregiver//监护者
    {
        private readonly Stack<MemoType> memo = new Stack<MemoType>();
        public void SaveMemoType(MemoType memoType)
        {
            memo.Push(memoType);
        }
        public MemoType RestoreMemoType()
        {
            return memo.Pop();
        }
    }
}

输出结果:

当前操作:斜体

撤销一次操作:下划线

撤销两次操作:加粗

相关推荐
kylezhao201915 小时前
第1章:第一节 开发环境搭建(工控场景最优配置)
开发语言·c#
阿闽ooo16 小时前
深入浅出适配器模式:从跨国插头适配看接口兼容的艺术
c++·设计模式·适配器模式
钰fly17 小时前
C#文件与数据操作核心概念手册
c#
阿蒙Amon18 小时前
C#每日面试题-简述C#访问修饰符
windows·microsoft·c#
Kiyra19 小时前
WebSocket vs HTTP:为什么 IM 系统选择长连接?
分布式·websocket·网络协议·http·设计模式·系统架构·wpf
酩酊仙人20 小时前
ABP+Hangfire实现定时任务
后端·c#·asp.net·hangfire
阿蒙Amon21 小时前
C#每日面试题-属性和特性的区别
java·面试·c#
要记得喝水1 天前
某公司C#-WPF面试题-来自nowcoder(含答案和解析)--2
c#·wpf
山沐与山1 天前
【设计模式】Python责任链模式:从入门到实战
python·设计模式·责任链模式
繁星星繁1 天前
【项目】基于SDK实现的智能聊天助手(使用api接入deepseek)------(二)
c++·设计模式·学习方法