前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >备忘录设计模式

备忘录设计模式

作者头像
JusterZhu
发布2023-11-14 17:15:00
1440
发布2023-11-14 17:15:00
举报
文章被收录于专栏:JusterZhuJusterZhu

备忘录设计模式是一个行为设计模式,它能够在不破坏对象的封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

基本概念

备忘录模式由三部分组成:

  1. Originator(发起人):创建一个备忘录并存储其当前的内部状态;还可以使用备忘录来恢复其内部状态。
  2. Memento(备忘录):存储Originator的内部状态。它应保护内容,不被任何其他代码修改。
  3. Caretaker(看管人):负责在适当的时间保存和恢复Originator对象的状态。

使用场景

备忘录设计模式主要在以下情景中使用:

  • 当你需要保存和加载对象的时刻快照,同时避免暴露对象的实现细节。
  • 当直接访问对象会破坏封装性,并且引导其他冗余问题或限制时。
  • 当你需要保存和恢复数据到一个先前的点(如撤销操作、保存游戏进度等)时。
  • 当直接接口获取的信息暴露会导致安全问题或违背封装原则时,可以通过备份对象的内部状态来提供一个简化的界面。

下面是使用C#实现备忘录模式的例子:

代码语言:javascript
复制
public class Originator
{
    private string _state;

    public void SetState(string state)
    {
        this._state = state;
    }

    public Memento SaveStateToMemento()
    {
        return new Memento(_state);
    }
    
    public void GetStateFromMemento(Memento memento)
    {
        _state = memento.GetState();
    }
}

public class Memento
{
    private readonly string _state;

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

    public string GetState()
    {
        return _state;
    }
}

public class CareTaker
{
    private readonly List<Memento> _mementoList = new List<Memento>();

    public void Add(Memento state)
    {
        _mementoList.Add(state);
    }

    public Memento Get(int index)
    {
        return _mementoList[index];
    }
}

代码示例的使用:

代码语言:javascript
复制
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();

originator.SetState("State #1");
originator.SetState("State #2");
careTaker.Add(originator.SaveStateToMemento());

originator.SetState("State #3");
careTaker.Add(originator.SaveStateToMemento());

originator.SetState("State #4");
Console.WriteLine("Current State: " + originator.GetState());

originator.GetStateFromMemento(careTaker.Get(0));
Console.WriteLine("First saved State: " + originator.GetState());
originator.GetStateFromMemento(careTaker.Get(1));
Console.WriteLine("Second saved State: " + originator.GetState());

结论

备忘录模式是一种非常有用的设计模式,在需要保存对象状态,以便在以后的某个时间点恢复的情况下,特别有帮助。然而,如果需要频繁地保存大量数据,这可能会占用大量的内存,所以在使用备忘录模式时需要谨慎考虑。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
  • 使用场景
  • 结论
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档