机房重构之备忘录模式的应用

举报
小小张自由--张有博 发表于 2021/11/22 22:25:07 2021/11/22
【摘要】 目录 何为备忘录模式 注意事项 机房重构的应用 首先在实体层创建一个BasicDataEntity类——发起者类 备忘录类—BasicDataMemento 管理者类——BaiscDataCaretaker UI层,当窗体记载时,将数据传给实体层(发起者类) 当单击恢复按钮时,将备忘录中的数据传出来 何为备忘录模式 ...

目录

何为备忘录模式

注意事项

机房重构的应用

首先在实体层创建一个BasicDataEntity类——发起者类

备忘录类—BasicDataMemento

管理者类——BaiscDataCaretaker

UI层,当窗体记载时,将数据传给实体层(发起者类)

当单击恢复按钮时,将备忘录中的数据传出来


何为备忘录模式

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

注意事项

  • 通过一个备忘录类专门存储对象状态。
  • 客户不与备忘录类耦合,与备忘录管理类耦合。
  • 为了符合迪米特原则,还要增加一个管理备忘录的类。

备忘录模式使用三个类 MementoOriginator(发起者类) 和 CareTaker(管理者类)

Memento (备忘录类):包含了要被恢复的对象的状态。

Originator(发起者类): 创建并在 Memento 对象中存储状态。

Caretaker(管理者类): 对象负责从 Memento 中恢复对象的状态。

机房重构的应用

实现思路:将备忘录模式用在了基本数据设定窗体,当窗体加载时用发起者类里创建备忘录的方法,能将数据从界面——→发起者——→备忘录(存住),单击恢复按钮时用发起者的恢复备忘录的方法得到备忘录中的数据

 

首先在实体层创建一个BasicDataEntity类——发起者类


  
  1. /// <summary>
  2. /// 基本数据设定
  3. /// </summary>
  4. public class BasicDataEntity
  5. {
  6. //VIP每小时收费
  7. //临时用户收费
  8. //至少上机时间
  9. //单位递增时间
  10. //最少金额
  11. private decimal vipRate;
  12. public decimal VipRate { get; set; }
  13. private decimal customerRate;
  14. public decimal CustomerRate { get; set; }
  15. private int leastTime;
  16. public int LeastTime { get; set; }
  17. private int unitTime;
  18. public int UnitTime { get; set; }
  19. public decimal minCash;
  20. public decimal MinCash { get; set; }
  21. //创建备忘录,
  22. public BasicDataMemento CreateMemento()
  23. {
  24. //将属性值传进备忘录
  25. return (new BasicDataMemento(vipRate, customerRate, leastTime, unitTime, minCash));
  26. }
  27. //恢复备忘录
  28. public void SetMemento(BasicDataMemento memento)
  29. {
  30. //恢复备忘录,将Memento导入并将相关数据恢复
  31. vipRate = memento.VipRate;
  32. customerRate = memento.CustomerRate;
  33. leastTime = memento.LeastTime;
  34. unitTime = memento.UnitTime;
  35. minCash = memento.MinCash;
  36. }
  37. }

备忘录类—BasicDataMemento


  
  1. /// <summary>
  2. /// 备忘录类
  3. /// </summary>
  4. public class BasicDataMemento
  5. {
  6. //只读属性
  7. private decimal vipRate;
  8. public decimal VipRate { get; }
  9. private decimal customerRate;
  10. public decimal CustomerRate { get; }
  11. private int leastTime;
  12. public int LeastTime { get; }
  13. private int unitTime;
  14. public int UnitTime { get; }
  15. public decimal minCash;
  16. public decimal MinCash { get; }
  17. //构造方法,将相关数据导入
  18. public BasicDataMemento(decimal vipRate, decimal customerRate, int leastTime, int unitTime,decimal minCash)
  19. {
  20. this.vipRate = vipRate;
  21. this.customerRate = customerRate;
  22. this.leastTime = leastTime;
  23. this.unitTime = unitTime;
  24. this.minCash = minCash;
  25. }
  26. }

管理者类——BaiscDataCaretaker


  
  1. /// <summary>
  2. /// 管理者类
  3. /// </summary>
  4. public class BaiscDataCaretaker
  5. {
  6. private BasicDataMemento memento;
  7. //得到备忘录
  8. public BasicDataMemento Memento
  9. {
  10. get { return memento; }
  11. set { memento = value; }
  12. }
  13. }

UI层,当窗体记载时,将数据传给实体层(发起者类)


  
  1. //实例化发起者、管理者
  2. Entity.Boss.BasicDataEntity originator = new Entity.Boss.BasicDataEntity();
  3. Entity.Boss.BaiscDataCaretaker caretaker = new Entity.Boss.BaiscDataCaretaker();
  4. private void frmBasicData_Load(object sender, EventArgs e)
  5. {
  6. //实例化外观层
  7. Facade.SelectDataFacade facade = new Facade.SelectDataFacade();
  8. DataTable dt = facade.SelectData();
  9. //数据绑定,将数据库中的数据显示到窗体
  10. try
  11. {
  12. //显示到窗体
  13. txtVipRate.Text = dt.Rows[0]["Rate"].ToString();
  14. txtCustomerRate.Text = dt.Rows[0]["tmpRate"].ToString();
  15. txtLeastTime.Text = dt.Rows[0]["leastTime"].ToString();
  16. txtUnitTime.Text = dt.Rows[0]["unitTime"].ToString();
  17. txtMinCash.Text = dt.Rows[0]["limitCash"].ToString();
  18. }
  19. catch (Exception)
  20. {
  21. MessageBox.Show("数据未能成功加载");
  22. }
  23. //给备忘录的发起者
  24. //记录窗体中的初始数据
  25. originator.VipRate =decimal.Parse( txtVipRate.Text);
  26. originator.UnitTime = int.Parse(txtUnitTime.Text);
  27. originator.LeastTime=int.Parse(txtLeastTime.Text);
  28. originator.CustomerRate = decimal.Parse(txtCustomerRate.Text);
  29. originator.MinCash = decimal.Parse(txtMinCash.Text);
  30. //存进备忘录
  31. caretaker.Memento = originator.CreateMemento();
  32. }

当单击恢复按钮时,将备忘录中的数据传出来


  
  1. //恢复按钮
  2. private void btnstore_Click(object sender, EventArgs e)
  3. {
  4. //恢复备忘录中的数据
  5. originator.SetMemento(caretaker.Memento);
  6. txtVipRate.Text = originator.VipRate.ToString() ;
  7. txtUnitTime.Text = originator.UnitTime.ToString();
  8. txtCustomerRate.Text = originator.CustomerRate.ToString();
  9. txtLeastTime.Text = originator.LeastTime.ToString();
  10. txtMinCash.Text = originator.MinCash.ToString();
  11. }

如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。

文章来源: blog.csdn.net,作者:小小张自由—>张有博,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/promsing/article/details/108386569

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。