机房重构之职责链模式的应用
【摘要】
目录
何为职责链模式
优点:
机房重构的应用
Handler父类,定义了一个处理请示的接口
ActivateHandler类,判断卡号密码是否正确
ActivateHandler1类,判断卡内余额是否大于0
OnlineHandler类,判断卡号是否上机
在外观层设置职责链的上下级关系
UI层直接调用Facade层的方...
目录
何为职责链模式
使多个对象都有机会处理请求,从而避免请求的发起者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递改请求,直到有一个对象处理它为止。
优点:
1、降低耦合度。它将请求的发送者和接收者解耦。
2、简化了对象。使得对象不需要知道链的结构。
3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
4、增加新的请求处理类很方便。
机房重构的应用
实现思路——将职责链用在了上机的过程,首先判断账号密码是否正确,若正确加判断卡内余额是否大于0,若大于0判断该卡号是否正在上机。若以上条件全部满足,上机成功!。
Handler父类,定义了一个处理请示的接口
-
/// <summary>
-
/// 上机的职责链
-
/// 定义了一个处理请示的接口
-
/// </summary>
-
public abstract class Handler
-
{
-
protected Handler successor;
-
/// <summary>
-
/// 设置继任者
-
/// </summary>
-
/// <param name="successor"></param>
-
public void SetSuccessor(Handler successor)
-
{
-
this.successor = successor;
-
}
-
-
/// <summary>
-
/// 处理请求
-
/// 子类都重写该方法
-
/// </summary>
-
/// <param name="Cardno">卡号</param>
-
/// <param name="Password">密码</param>
-
public abstract bool HandlerRequest(string Cardno,string Password);
-
}
ActivateHandler类,判断卡号密码是否正确
-
/// <summary>
-
///判断卡号密码是否正确
-
/// </summary>
-
public class ActivateHandler : Handler
-
{
-
public override bool HandlerRequest(string Cardno, string Password)
-
{
-
Factory.Client.LoginFactory factory = new Factory.Client.LoginFactory();//实例化工厂
-
IDAL.Client.LoginIDAL idal = factory.Login();//调用工厂方法创建接口
-
DataTable dt = idal.ClientLogin(Cardno, Password);//接收D层的返回值
-
-
bool flag;
-
-
//判断卡号密码是否正确
-
if (dt.Rows.Count == 0)
-
{
-
//不正确
-
return flag = false;
-
}
-
else
-
{
-
//正确
-
return successor.HandlerRequest(Cardno, Password);
-
}
-
}
-
}
ActivateHandler1类,判断卡内余额是否大于0
-
/// <summary>
-
/// 判断卡内余额是否大于0
-
/// </summary>
-
public class ActivateHandler1 : Handler
-
{
-
public override bool HandlerRequest(string Cardno, string Password)
-
{
-
Factory.Client.LoginFactory factory = new Factory.Client.LoginFactory();//实例化工厂
-
IDAL.Client.LoginIDAL idal = factory.Login();//调用工厂方法创建接口
-
DataTable dt = idal.ClientLogin(Cardno, Password);//接收D层的返回值
-
-
/拿到卡号中的余额
-
string strCash = dt.Rows[0][4].ToString();
-
Decimal Cash = Decimal.Parse(strCash);
-
-
//判断余额是否大于0
-
bool flag;
-
if (Cash>0)
-
{
-
//转移到下一位
-
return successor.HandlerRequest(Cardno, Password);
-
-
}
-
else
-
{
-
return flag = false;
-
}
-
}
-
}
OnlineHandler类,判断卡号是否上机
-
/// <summary>
-
/// 判断卡号是否已上机
-
/// </summary>
-
public class OnlineHandler : Handler
-
{
-
public override bool HandlerRequest(string Cardno, string Password)
-
{
-
//去Online表
-
Factory.Client.LoginFactory2 factory2 = new Factory.Client.LoginFactory2();//实例化工厂
-
IDAL.Client.SelectOnline idal2 = factory2.Login(); //调用工厂方法创建接口
-
DataTable dt2 = idal2.SelectOnline(Cardno);//接收D层的返回值
-
-
bool flag;
-
//判断卡号是否上机
-
if (dt2.Rows.Count == 0)
-
{
-
// 将上机信息写入Online,line表
-
Factory.Client.LoginFactory3 factory3 = new Factory.Client.LoginFactory3();
-
IDAL.Client.AlterData idal3 = factory3.Login();
-
DataTable dt3 = idal3.AlterData(Cardno);
-
return flag = true;
-
-
}
-
else
-
{
-
return flag = false;
-
}
-
}
-
}
在外观层设置职责链的上下级关系
-
/// <summary>
-
/// 职责链模式的上机
-
/// </summary>
-
/// <param name="Cardno">卡号</param>
-
/// <param name="Password">密码</param>
-
/// <returns></returns>
-
public bool LoginHandler(string Cardno,string Password)
-
{
-
//多态思想
-
//实例化三个定义的具体处理类
-
BLL.LoginHandlerBLL.Handler judgeNoAndPass = new BLL.LoginHandlerBLL.ActivateHandler();
-
BLL.LoginHandlerBLL.Handler judgeCash = new BLL.LoginHandlerBLL.ActivateHandler1();
-
BLL.LoginHandlerBLL.Handler judgeOnline = new BLL.LoginHandlerBLL.OnlineHandler();
-
-
//设置上下级别
-
judgeNoAndPass.SetSuccessor(judgeCash);
-
judgeCash.SetSuccessor(judgeOnline);
-
-
//接收最后的布尔值
-
bool flag;
-
flag = judgeNoAndPass.HandlerRequest(Cardno, Password);
-
return flag;
-
-
}
UI层直接调用Facade层的方法
-
private void btnOK_Click(object sender, EventArgs e)
-
{
-
-
Entity.Information.UserID = txtUserName.Text.Trim();
-
string Cardno = txtUserName.Text.Trim();
-
string Password = txtPassword.Text.Trim();
-
-
Facade.Client.LoginFacade facade = new Facade.Client.LoginFacade();
-
bool mark;
-
-
//职责链模式上下机的过程
-
mark = facade.LoginHandler(Cardno,Password);
-
-
if (mark)
-
{
-
MessageBox.Show("欢迎使用","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
-
frmClientMain frm = new frmClientMain();
-
this.Hide(); //本窗体隐藏
-
rm.Show();
-
-
}
-
else
-
{
-
MessageBox.Show("请核对信息是否已上机 或余额不足");
-
}
-
-
}
博文至此,关于职责链模式应用就写完了,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。
文章来源: blog.csdn.net,作者:小小张自由—>张有博,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/promsing/article/details/108389123
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)