机房合作-职责链模式实现用户登陆

简介: 机房合作-职责链模式实现用户登陆

职责链模式实现用户登陆

一、概念

①什么是职责链模式

Chain of Responsibility :使用多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

简单理解:每一个对象都包含一类判断,将这个对象连成一条链,设置先后顺序,让请求沿着链传递,直到有一个对象能够处理为止。

②如何使用职责链模式(chain of responsibility)

设置多个具体的职责类,并且形成一条链,实例化时需要设置后继者。

③什么时候使用职责链模式

当涉及到条件判断的时候就可以考虑使用。

④为什么要使用职责链模式

由于每一个类都可以是一个判断,使用职责链模式可以解决大量分支判断造成难以维护,灵活性差的问题。

二、类图



三、实战 使用职责链模式实现登陆

①类图



实现代码

HandlerLgoin类

 public   abstract  class HandlerLogin
    {
        protected HandlerLogin successor;
        /// <summary>
        /// 设置继承者
        /// </summary>
        /// <param name="successor">子链名</param>
        public void  SetSuccessor(HandlerLogin successor)
        {
            this.successor = successor;
        }
        //请求处理的抽象方法
        public abstract void HandlerRequest(CustomerModel customer);
    }

PassWordHandler类

public class PassWordHandler:HandlerLogin
    { /// <summary>
      /// //判断账户和密码是否正确
      /// </summary>
      /// <param name="customer">查询返回的实体</param>
      /// <returns></returns>
        public override void  HandlerRequest(CustomerModel customer )
        {
            if (customer==null )
            {
                throw new Exception("账号或密码错误,请重新输入");
            }
            else
            {
                //执行下一个类的方法并返回值
                successor.HandlerRequest(customer );
            }
        }
    }

ActivationHandler类

 public class ActivationHandler:HandlerLogin
    { /// <summary>
      /// 判断用户是否激活
      /// </summary>
      /// <param name="customer">实体</param>
      /// <returns></returns>
        public override void  HandlerRequest(CustomerModel customer)
        {
            if (customer.activation=="已激活")
            {
                 successor.HandlerRequest(customer);
            }
            else
            {
                throw new Exception("账户未激活,请联系工作人员进行激活");
            }
        }
    }

OnlineHandler类

public class OnlineHandler:HandlerLogin 
    {   /// <summary>
        /// 判断用户是否正在上机
        /// </summary>
        /// <param name="customer">实体</param>
        /// <returns></returns>
        public override void  HandlerRequest(CustomerModel customer)
        {
            if (customer.loginStatus=="正在上机")
            {
                throw new Exception("用户正在上机,无需登录");
            }
            else
            {
                //执行下一个类的方法并返回值
                successor.HandlerRequest(customer);
            }
        }
    }

ActivationHandler类

public class ActivationHandler:HandlerLogin
    {   /// <summary>
        /// 判断用户是否激活
        /// </summary>
        /// <param name="customer">实体</param>
        /// <returns></returns>
        public override void  HandlerRequest(CustomerModel customer)
        {
            if (customer.activation=="已激活")
            {
                 successor.HandlerRequest(customer);
            }
            else
            {
                throw new Exception("账户未激活,请联系工作人员进行激活");
            }
        }
    }

业务逻辑层

public class CustomerLoginBLL
    {
        //实例化一个WCF服务代理
        DateBaseServiecClient client = new DateBaseServiecClient();
        /// <summary>
        /// 查询用户信息,利用职责链模式进行判断是否满足相应条件
        /// </summary>
        /// <param name="id">账号</param>
        /// <param name="passWord">密码</param>
        public void  SelectCustomerInfo(string id,string passWord)
        {
            //通过WCF服务代理调用D层接口
           CustomerModel customer= client.SelectCustomerInfo(id ,passWord);
            StaticCustomer.iD = id ;
            StaticCustomer.pWD = passWord;
            StaticCustomer.dateTimeOn = DateTime.Now;
            //实例化职责类
            Handler.PassWordHandler passWordHandler = new Handler.PassWordHandler();
            Handler.ActivationHandler activationHandler = new Handler.ActivationHandler();
            Handler.OnlineHandler onlineHandler = new Handler.OnlineHandler();
            Handler.BalanceHandler balanceHandler = new Handler.BalanceHandler();
            //设置上下级
            passWordHandler.SetSuccessor(activationHandler);
            activationHandler.SetSuccessor(onlineHandler);
            onlineHandler.SetSuccessor(balanceHandler);
            //设置职责链开始节点
            passWordHandler.HandlerRequest(customer);
        }
目录
相关文章
|
1月前
|
监控 安全 物联网
不会代码,中小企业管理员如何实现巡逻巡更系统
在现代安全管理中,园区、物业和工厂的巡逻巡更至关重要。本文对比了草料二维码、诺怀云系统和邦巡系统三款主流巡逻巡更系统,分析了它们的技术集成、系统复杂度、移动办公与物联网支持、价格与成本等方面的特点,帮助用户选择最适合的解决方案。草料二维码适合低成本、快速部署的中小企业;诺怀云系统适合需要全面移动协同办公的物业管理公司;邦巡系统则适合需要全场景、多业务、高效率巡检协作的企业。
|
网络协议 应用服务中间件 数据库
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
119 1
出差在外,远程访问企业局域网象过河ERP系统【内网穿透】
|
7月前
|
网络协议 应用服务中间件 数据库
出差在外,远程访问企业局域网象过河ERP系统「内网穿透」
出差在外,远程访问企业局域网象过河ERP系统「内网穿透」
|
算法
机房合作-策略模式实现用户充值
机房合作-策略模式实现用户充值
75 1
|
网络协议 应用服务中间件 数据库
当你出差在外时,怎样轻松访问远程访问企业局域网象过河ERP系统?
当你出差在外时,怎样轻松访问远程访问企业局域网象过河ERP系统?
109 0
|
网络协议 应用服务中间件 数据库
如何在出差期间远程访问企业ERP系统?内网穿透解决您的难题!
如何在出差期间远程访问企业ERP系统?内网穿透解决您的难题!
176 0
|
安全 NoSQL Redis
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)
|
存储 消息中间件 安全
老板:公司系统太多,能不能实现账号互通?(一)
最近开发新产品,然后老板说我们现在系统太多了,每次切换系统登录太麻烦了,能不能做个优化,同一账号互通掉。作为一个资深架构狮,老板的要求肯定要满足,安排!
老板:公司系统太多,能不能实现账号互通?(一)
|
人工智能
VOS的直拨,回拨,半直拨三种业务基本模式是怎样的业务流程,有什么区别?
很多新手在使用我们的VOS系统时不了解关于直拨,回拨,半直拨的工作流程,以下为大家详细介绍。 直拨业务模式:用户拨打预约号,平台接收到主叫号码后,IVR系统播放提示语音,用户拨打被叫号码,平台收全被叫号码后发起呼叫,或者用户根据其他的IVR提示语音做出相应的操作,例如查询余额等。 \ 回拨业务模式:用户拨打预约号,平台接收到主叫号码后主动挂断通话,在设定时间内回拨到用户的话机上,用户摘机后听到IVR系统播放提示语音,用户根据语音提示输入被叫号码,平台收全被叫号码后发起呼叫,或者用户根据其他的IVR提示语音做出相应的操作,例如查询余额等。 \ 半直拨业务模式:用户拨打预约号,平台接收到主叫号码后
|
安全 数据安全/隐私保护 网络协议