备忘录模式 快来打我* 2021-09-17 00:06 385阅读 0赞 ## 19.备忘录模式 ## ![70][] class Program { static void Main(string[] args) { var persons = new List<ContactPerson> { new ContactPerson { Name= "Learning Hard", MobileNum = "123445"}, new ContactPerson { Name = "Tony", MobileNum = "234565"}, new ContactPerson { Name = "Jock", MobileNum = "231455"} }; var mobileOwner = new MobileOwner(persons); mobileOwner.Show(); // 创建备忘录并保存备忘录对象 var caretaker = new Caretaker { ContactM = mobileOwner.CreateMemento() }; Console.WriteLine("----移除最后一个联系人--------");// 更改发起人联系人列表 mobileOwner.ContactPersons.RemoveAt(2); mobileOwner.Show(); Console.WriteLine("-------恢复联系人列表------");// 恢复到原始状态 mobileOwner.RestoreMemento(caretaker.ContactM); mobileOwner.Show(); Console.Read(); } } public class ContactPerson { public string Name { get; set; } public string MobileNum { get; set; } } public class MobileOwner// 发起人 { public List<ContactPerson> ContactPersons { get; set; }// 发起人需要保存的内部状态 public MobileOwner(List<ContactPerson> persons) { ContactPersons = persons; } public ContactMemento CreateMemento()// 创建备忘录,将当期要保存的联系人列表导入到备忘录中 { // 这里也应该传递深拷贝,new List方式传递的是浅拷贝, // 因为ContactPerson类中都是string类型,所以这里new list方式对ContactPerson对象执行了深拷贝 // 如果ContactPerson包括非string的引用类型就会有问题,所以这里也应该用序列化传递深拷贝 return new ContactMemento(new List<ContactPerson>(this.ContactPersons)); } public void RestoreMemento(ContactMemento memento)// 将备忘录中的数据备份导入到联系人列表中 { //应该传递contactPersonBack的深拷贝,深拷贝可以使用序列化来完成 ContactPersons = memento.ContactPersonBack; } public void Show() { Console.WriteLine("联系人列表中有{0}个人,他们是:", ContactPersons.Count); foreach (ContactPerson p in ContactPersons) { Console.WriteLine("姓名: {0} 号码为: {1}", p.Name, p.MobileNum); } } } public class ContactMemento// 备忘录 { public List<ContactPerson> ContactPersonBack; // 保存发起人的内部状态 public ContactMemento(List<ContactPerson> persons) { ContactPersonBack = persons; } } public class Caretaker// 管理角色 { public ContactMemento ContactM { get; set; } } ![70 1][] [70]: /images/20210725/dc1c75557a57467cac63c3642c0c81e5.png [70 1]: /images/20210725/22bbf9f4c766442f84df1c56f23d707d.png
相关 备忘录模式 定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: ![1340804147_ 以你之姓@/ 2022年09月19日 12:20/ 0 赞/ 185 阅读
相关 备忘录模式 今天无意间看到了备忘录模式,由于之前没有接触过,出于好奇,研究了一下,简单来说就是把当前状态记录下来,作为备份,用于意外情况发生恢复用的,有点类似于回退的意思。 备忘录设计 电玩女神/ 2022年08月19日 15:10/ 0 赞/ 160 阅读
相关 备忘录模式 1.使用场景: 一系列的操作之后恢复原来的状态。实际的使用场景有事务的回滚操作等。 2.UML表示 在备忘录模式中有以下的几种对象: 2.1源发器:Origi 骑猪看日落/ 2022年05月31日 09:26/ 0 赞/ 221 阅读
相关 备忘录模式 备忘录模式 一、概述 1. 就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到 原先的状态。 2. 结构 源发器类Origin 「爱情、让人受尽委屈。」/ 2022年04月17日 00:21/ 0 赞/ 225 阅读
相关 备忘录模式 前言 备忘录(Memento),在不破坏封装的前提下,捕获一个对象的内不状态,并在该对象之外保存这个状态 ,这样以后就可将该对象恢复到原来保存的状态。 一、发起人 一时失言乱红尘/ 2021年12月09日 00:49/ 0 赞/ 278 阅读
相关 备忘录模式 图例不全,大家最好还是看原文:[原链接][Link 1] 在阎宏博士的《JAVA与模式》一书中开头是这样描述备忘录(Memento)模式的: 备忘录模式又叫做快照 骑猪看日落/ 2021年09月26日 15:50/ 0 赞/ 343 阅读
相关 备忘录模式 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原来保存的状态。 应用实例: 1、后悔药。 2、打游戏时的 柔情只为你懂/ 2021年09月17日 03:12/ 0 赞/ 322 阅读
相关 备忘录模式 19.备忘录模式 ![70][] class Program { static void Main(string[] args) 快来打我*/ 2021年09月17日 00:06/ 0 赞/ 386 阅读
相关 备忘录模式 一 点睛 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件 爱被打了一巴掌/ 2021年07月24日 22:49/ 0 赞/ 474 阅读
相关 备忘录模式 忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 **意图**:在不破坏封装性的前提下... 小灰灰/ 2020年06月13日 05:38/ 0 赞/ 721 阅读
还没有评论,来说两句吧...