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

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

职责链模式实现用户登陆

一、概念

①什么是职责链模式

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);
        }
目录
相关文章
|
9月前
|
安全 前端开发 JavaScript
19分布式电商项目 - 运营商系统登录与安全控制
19分布式电商项目 - 运营商系统登录与安全控制
30 0
直销公排系统模式制度开发搭建讲解
直销公排系统模式制度开发搭建讲解
|
12月前
|
算法
机房合作-策略模式实现用户充值
机房合作-策略模式实现用户充值
53 1
|
数据采集 人工智能 安全
当顶象无感验证遇上工商联人才交流服务中心
全国工商联人才交流服务中心,积极探索新时代服务,建设创新发展的途径和方法
77 0
当顶象无感验证遇上工商联人才交流服务中心
|
人工智能 自然语言处理 机器人
公司使用okcc呼叫中心有什么好处?
企业维护好与客户之间的关系成为企业盈利的关键点,企业呼叫中心为企业与客户服务提供了良好的沟通保证,搭建呼叫中心系统已经是现代企业必不可少的,那么搭建呼叫中心对企业有什么帮助呢,下面为大家做详细介绍。 一、呼叫中心是什么? 呼叫中心,又称客户服务中心,起源于20世纪30年代,最初是把用户的呼叫转移到应答台或者专家处。此后,随着要转移的呼叫和应答增多,开始建立起交互式语音应答系统,这种系统能把客户部分常见问题的应答实现由机器“自动话务员”来应答和处理。(摘自百度百科)。 二、搭建呼叫中心对企业有什么帮助: 1、提升品牌形象,建立一站式服务平台 通过呼叫中心将企业内分属各职能部门为客户提供的服
|
存储 消息中间件 安全
老板:公司系统太多,能不能实现账号互通?(一)
最近开发新产品,然后老板说我们现在系统太多了,每次切换系统登录太麻烦了,能不能做个优化,同一账号互通掉。作为一个资深架构狮,老板的要求肯定要满足,安排!
老板:公司系统太多,能不能实现账号互通?(一)
|
安全 NoSQL Redis
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)
老板:公司系统太多,能不能实现账号互通?(二)

热门文章

最新文章