机房重构之备忘录模式的应用
【摘要】
目录
何为备忘录模式
注意事项
机房重构的应用
首先在实体层创建一个BasicDataEntity类——发起者类
备忘录类—BasicDataMemento
管理者类——BaiscDataCaretaker
UI层,当窗体记载时,将数据传给实体层(发起者类)
当单击恢复按钮时,将备忘录中的数据传出来
何为备忘录模式 ...
目录
首先在实体层创建一个BasicDataEntity类——发起者类
何为备忘录模式
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
注意事项
- 通过一个备忘录类专门存储对象状态。
- 客户不与备忘录类耦合,与备忘录管理类耦合。
- 为了符合迪米特原则,还要增加一个管理备忘录的类。
备忘录模式使用三个类 Memento、Originator(发起者类) 和 CareTaker(管理者类)。
Memento (备忘录类):包含了要被恢复的对象的状态。
Originator(发起者类): 创建并在 Memento 对象中存储状态。
Caretaker(管理者类): 对象负责从 Memento 中恢复对象的状态。
机房重构的应用
实现思路:将备忘录模式用在了基本数据设定窗体,当窗体加载时用发起者类里创建备忘录的方法,能将数据从界面——→发起者——→备忘录(存住),单击恢复按钮时用发起者的恢复备忘录的方法得到备忘录中的数据。
首先在实体层创建一个BasicDataEntity类——发起者类
-
/// <summary>
-
/// 基本数据设定
-
/// </summary>
-
public class BasicDataEntity
-
{
-
//VIP每小时收费
-
//临时用户收费
-
//至少上机时间
-
//单位递增时间
-
//最少金额
-
private decimal vipRate;
-
public decimal VipRate { get; set; }
-
-
private decimal customerRate;
-
public decimal CustomerRate { get; set; }
-
-
private int leastTime;
-
public int LeastTime { get; set; }
-
-
private int unitTime;
-
public int UnitTime { get; set; }
-
-
public decimal minCash;
-
public decimal MinCash { get; set; }
-
-
//创建备忘录,
-
public BasicDataMemento CreateMemento()
-
{
-
//将属性值传进备忘录
-
return (new BasicDataMemento(vipRate, customerRate, leastTime, unitTime, minCash));
-
}
-
-
//恢复备忘录
-
public void SetMemento(BasicDataMemento memento)
-
{
-
//恢复备忘录,将Memento导入并将相关数据恢复
-
vipRate = memento.VipRate;
-
customerRate = memento.CustomerRate;
-
leastTime = memento.LeastTime;
-
unitTime = memento.UnitTime;
-
minCash = memento.MinCash;
-
}
-
-
}
备忘录类—BasicDataMemento
-
/// <summary>
-
/// 备忘录类
-
/// </summary>
-
public class BasicDataMemento
-
{
-
//只读属性
-
private decimal vipRate;
-
public decimal VipRate { get; }
-
-
private decimal customerRate;
-
public decimal CustomerRate { get; }
-
-
private int leastTime;
-
public int LeastTime { get; }
-
-
private int unitTime;
-
public int UnitTime { get; }
-
-
public decimal minCash;
-
public decimal MinCash { get; }
-
-
//构造方法,将相关数据导入
-
public BasicDataMemento(decimal vipRate, decimal customerRate, int leastTime, int unitTime,decimal minCash)
-
{
-
this.vipRate = vipRate;
-
this.customerRate = customerRate;
-
this.leastTime = leastTime;
-
this.unitTime = unitTime;
-
this.minCash = minCash;
-
}
-
-
}
管理者类——BaiscDataCaretaker
-
/// <summary>
-
/// 管理者类
-
/// </summary>
-
public class BaiscDataCaretaker
-
{
-
private BasicDataMemento memento;
-
//得到备忘录
-
public BasicDataMemento Memento
-
{
-
get { return memento; }
-
set { memento = value; }
-
}
-
-
}
UI层,当窗体记载时,将数据传给实体层(发起者类)
-
//实例化发起者、管理者
-
Entity.Boss.BasicDataEntity originator = new Entity.Boss.BasicDataEntity();
-
Entity.Boss.BaiscDataCaretaker caretaker = new Entity.Boss.BaiscDataCaretaker();
-
private void frmBasicData_Load(object sender, EventArgs e)
-
{
-
//实例化外观层
-
Facade.SelectDataFacade facade = new Facade.SelectDataFacade();
-
DataTable dt = facade.SelectData();
-
-
//数据绑定,将数据库中的数据显示到窗体
-
try
-
{
-
//显示到窗体
-
txtVipRate.Text = dt.Rows[0]["Rate"].ToString();
-
txtCustomerRate.Text = dt.Rows[0]["tmpRate"].ToString();
-
txtLeastTime.Text = dt.Rows[0]["leastTime"].ToString();
-
txtUnitTime.Text = dt.Rows[0]["unitTime"].ToString();
-
txtMinCash.Text = dt.Rows[0]["limitCash"].ToString();
-
}
-
catch (Exception)
-
{
-
-
MessageBox.Show("数据未能成功加载");
-
}
-
-
//给备忘录的发起者
-
//记录窗体中的初始数据
-
originator.VipRate =decimal.Parse( txtVipRate.Text);
-
originator.UnitTime = int.Parse(txtUnitTime.Text);
-
originator.LeastTime=int.Parse(txtLeastTime.Text);
-
originator.CustomerRate = decimal.Parse(txtCustomerRate.Text);
-
originator.MinCash = decimal.Parse(txtMinCash.Text);
-
-
//存进备忘录
-
caretaker.Memento = originator.CreateMemento();
-
-
}
当单击恢复按钮时,将备忘录中的数据传出来
-
//恢复按钮
-
private void btnstore_Click(object sender, EventArgs e)
-
{
-
//恢复备忘录中的数据
-
originator.SetMemento(caretaker.Memento);
-
txtVipRate.Text = originator.VipRate.ToString() ;
-
txtUnitTime.Text = originator.UnitTime.ToString();
-
txtCustomerRate.Text = originator.CustomerRate.ToString();
-
txtLeastTime.Text = originator.LeastTime.ToString();
-
txtMinCash.Text = originator.MinCash.ToString();
-
}
如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。
文章来源: blog.csdn.net,作者:小小张自由—>张有博,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/promsing/article/details/108386569
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)