设计模式(21)----- 备忘录模式

概念:

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

意图:

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

主要解决:

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

优点:

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

缺点:

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

备忘录模式的主要角色如下。

发起人(Originator)角色: 记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。

using System;
using System.Collections.Generic;

public class 手机
{
    private List<string> mList = new List<string>();
    
    public void 返厂清空数据()
    {
        mList.Clear();
    }

    public void 存储手机号(string l)
    {
        mList.Add(l);
    }
    public void 得到存储信息()
    {
        foreach(var n in mList)
        {
            Console.WriteLine(n);
        }
    }
    public 备忘录 create备忘录()
    {
        return new 备忘录(mList);
    }
    public void 读取备忘录(备忘录 m)
    {
        foreach(string a in m.get备忘录())
        {
            存储手机号(a);
        }
    }
}

备忘录(Memento)角色: 负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。

using System.Collections.Generic;

public class 备忘录
{
    private List<string> list = new List<string>();

    public 备忘录(List<string> a)
    {
        set备忘录(a);
    }

    public void set备忘录(List<string> l)
    {
        foreach(string v in l)
        {
            list.Add(v);
        }
    }
    public List<string> get备忘录()
    {
        return list;
    }
}

管理者(Caretaker)角色: 对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

public class 备忘录系统
{
    private 备忘录 m;
    public void set备忘录(备忘录 a)
    {
        m = a;
    }
    public 备忘录 get备忘录()
    {
        return m;
    }
}

测试:

using System;

class Program
{
    static void Main(string[] args)
    {
        手机 t = new 手机();
        备忘录系统 m = new 备忘录系统();
        t.存储手机号("111111111111");
        t.存储手机号("222222222222");
        t.存储手机号("333333333333");
        t.存储手机号("444444444444");
        m.set备忘录(t.create备忘录());
        
        t.得到存储信息();
        Console.WriteLine("返厂前手机数据--------------");
        t.返厂清空数据();
        t.存储手机号("555555555555");
        t.得到存储信息();
        Console.WriteLine("返厂后手机数据-------------");
        t.读取备忘录(m.get备忘录());
        t.得到存储信息();
        Console.WriteLine("读取备忘录数据的手机数据-------------");

        Console.Read();
    }
}


输出示例
在这里插入图片描述
设计模式------首页

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值