我是靠谱客的博主 鳗鱼短靴,最近开发中收集的这篇文章主要介绍C#机房重构-修改密码之职责链模式+反射前言修改密码类图代码实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C#机房重构-修改密码之职责链模式+反射

  • 前言
  • 修改密码类图
  • 代码实现
    • 配置文件
    • B层代码
    • 职责链类
      • Handler类
      • PastPassWordHandler类
      • NewPassWordHandler类
    • UpDatePassWordFactory类

前言

通过小组集体学习,深入的讨论学习了职责链模式,职责链模式主要处理的业务逻辑常是顺序或者是选择结构,提出的请求沿着这条对象链传递一直到有对象能够处理为止。由于职责链不太符合开闭原则,我如果在这条业务线加一个功能,可能就需要重新排序,就需要修改类里面的代码,这时候我们可以利用反射和配置文件,通过修改配置文件来实现可扩充。

修改密码类图

在这里插入图片描述

代码实现

配置文件

<add key ="UpDatePassWord" value ="PastPassWordHandler,NewPassWordHandler"/>

B层代码

 public class StudentChangePassWordBLL
    {

        bool flag;
        /// <summary>
        /// 策略模式修改密码
        /// </summary>
        /// <param name="userInfo">用户信息用户名密码</param>
        /// <returns></returns>
        public Boolean Result(Model.UserInfo userInfo)
        {
            

            //声明一个数组将配置文件中的value值去除,添加到数组中
            string [] UpDatePassWord = ConfigurationManager.AppSettings["UpDatePassWord"].Split(',');


            //实例化Handler类类型的数组
            List<Handler> list = new List<Handler>();
            //实例化修改密码的工厂类
            UpDatePassWordFactory factory = new UpDatePassWordFactory();
            //遍历数组
            for (int i = 0; i < UpDatePassWord.Length; i++)
            {
                //调用工厂的方法,将实例化的类添加到集合中
                list .Add  (factory.Result( UpDatePassWord[i].Trim()));
                
            }
            //如何集合中实例化的类数量为1
            if (list.Count ==1)
            {
                //体现多态
                list[0].HandleRequest(userInfo);


                
            }

            else
            {
                //如果集合里类的数量不等于1
                for (int i = 1; i <= list.Count-1; i++)
                {
                    //进行排序
                    list[i-1].SetSuccessor(list[i ]);


                }
            }
            //返回结果
            return flag = list[0].HandleRequest(userInfo);
            }

职责链类

Handler类

abstract  class Handler
    {
        //声明Handler类的一个对象
        protected Handler successor;
       /// <summary>
       /// 设置上下级
       /// </summary>
       /// <param name="successor"></param>
        public void SetSuccessor(Handler successor )
        {
            this.successor = successor;
        }
        //子类重写的方法
        public abstract Boolean  HandleRequest(Model.UserInfo userInfo);
        
    }

PastPassWordHandler类

//当原密码错误的时候有权处理,否则返回真
    class PastPassWordHandler:Handler
    {
        bool flag;
        //实例化工厂
        Factory.NormalUser.StudentChangePassWordFactory factory = new Factory.NormalUser.StudentChangePassWordFactory();
        /// <summary>
        /// 进行密码查询,判断密码是否正确
        /// </summary>
        /// <param name="userInfo">用户名和旧密码</param>
        /// <param name="newPassWord">新密码</param>
        /// <returns></returns>
        public override Boolean  HandleRequest(UserInfo userInfo)
        {//声明一个接口类型的对象来接收工厂的返回值
            IDAL.NormalUser.IStudentChangePassWordDAL idal = factory.Result();
            //多态,声明DataTable类型对象result来接收返回值
            DataTable result = idal.SelectPassWord(userInfo);
            //判断表中是否有数据
            if (result.Rows.Count==0)
            {
                return flag = false;
            }
            else
            {
                
                //执行下一个类的方法并返回值
                return successor.HandleRequest(userInfo);

            }
            
            
        }

    }

NewPassWordHandler类

//修改密码失败时有权处理,否则转到下一位
    class NewPassWordHandler:Handler
    {
        //实例化工厂
        Factory.NormalUser.StudentChangePassWordFactory factory = new Factory.NormalUser.StudentChangePassWordFactory();
        
        bool flag;
        /// <summary>
        /// 进行修改密码的操作
        /// </summary>
        /// <param name="userInfo">用户名和旧密码</param>
        /// <param name="newPassWord">新密码</param>
        /// <returns></returns>
        public override Boolean HandleRequest(UserInfo userInfo)
        {
            //定义一个接口类型的对象来接收工厂的返回值
            IDAL.NormalUser.IStudentChangePassWordDAL idal = factory.Result();
            //多态D层的方法

            int result = idal.UpdatePassWord(userInfo);
            //判断返回值
            if (result == 0)
            {
               return  flag = false;
            }
            else 
            {
                return flag = true;
            }
            
        }
    }

UpDatePassWordFactory类

class UpDatePassWordFactory
    {

        public Handler Result(string type)
        {
            //类名
            string className = "BLL" + "." + type ;
            //反射实例化类
            return (Handler )Assembly.Load("BLL").CreateInstance(className);
        }
    }

最后

以上就是鳗鱼短靴为你收集整理的C#机房重构-修改密码之职责链模式+反射前言修改密码类图代码实现的全部内容,希望文章能够帮你解决C#机房重构-修改密码之职责链模式+反射前言修改密码类图代码实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部