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

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

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

前言

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

修改密码类图

在这里插入图片描述

代码实现

配置文件

复制代码
1
2
<add key ="UpDatePassWord" value ="PastPassWordHandler,NewPassWordHandler"/>

B层代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//当原密码错误的时候有权处理,否则返回真 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类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//修改密码失败时有权处理,否则转到下一位 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类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
class UpDatePassWordFactory { public Handler Result(string type) { //类名 string className = "BLL" + "." + type ; //反射实例化类 return (Handler )Assembly.Load("BLL").CreateInstance(className); } }

最后

以上就是鳗鱼短靴最近收集整理的关于C#机房重构-修改密码之职责链模式+反射前言修改密码类图代码实现的全部内容,更多相关C#机房重构-修改密码之职责链模式+反射前言修改密码类图代码实现内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部