设计模式-职责链+反射

简介: 设计模式-职责链+反射

这次通过再次学习职责联的模式自己也是收获很多,话不多说直接上干货。

1:都知道职责链的模式是需要设置上下级关系的,这就可以用到一些判断当中,而且是多级判断的,所以我们每一个判断的需求都让它生成一个职责这样就不用把那么的if语句搬出来了。

2:反射的思路,我们可以通过在配置文件中把每个职责的反射写好,然后在单独的写一个反射来,这个反射是干什么的,它的value值是刚刚写好的职责的key值,并且排好序,用符号隔开。


这个是配置文件要准备的事情,这个准备好了就可以直接用了,我们在代码中获取配置文件中写好的那个有对应那些职责链key值的,然后进行切割把它放到一个数组中,要知道把这个值获取 后是一个字符串类型,放入数组的这个过程它的顺序就已经排好了,然后我们通过一个循环可以把这些切割好的字符直接放入反射中就能把那些具体的职责类实例化了,然后设置一个集合接收,这个集合就是这些职责类的父类,前面的工作做完以后就是设置这些类的上下级关系的时候了,也是通过循环的过程设置上下级。


上面这些过程都做完了,那么你的职责链的这个模式更加的灵活了,灵活在哪里呢,就在你的配置文件当中,如果我们在后面想要添加一个新的职责判断,那么我们就不需要再去代码中改了,只需要在配置文件中添加一个新的反射,然后在那个有那些职责Key值的反射中修改一下就好,添加或者修改顺序。


如下:


/

    <add key="T_reviseNew" value="CustomerChange.CustomerChangeNew"/>
    <add key="T_reviseOld" value="CustomerChange.CustomerChangeold"/>
    <add key="T_chargeK" value="CustomerChange.charge"/> //这三个是具体的职责类,通过反射实例化
    <add key="num" value="T_reviseOld,T_chargeK,T_reviseNew"/>  //这个是具体职责链的顺序有这个的出现就把被写死的职责顺序又重新活了,通过反射获取value然后进行切割,而且切割好的这个数组就是按照你写好的这个顺序存放的,只需要循环数组然后通过反射实例化具体的类就好,而你的集合存放顺序也是数组的循环顺序。

具体的代码操作:

            List<CustomerChangeG> list = new List<CustomerChangeG>();//声明一个父类型的集合
            string str = AbstractFactory.Factory.achieve("num");//通过反射获取写好的职责链顺序
            string[] sArray = str.Split(',');//切割写好的顺序放入数组
            foreach (string item in sArray)//循环数组把切割好字符串放入反射进行实例化
            {
                list.Add(AbstractFactory.Factory.Dynamic(item));//讲实例化好的职责类放入集合中
            }
            for (int i = 0; i < list.Count; i++)//循环集合
            {
                var item = list[i];//将具体的类放入这个item中
                var item1 = list[0];//获取第一个职责链中第一个职责类
                if (i != list.Count - 1)//判断是不是集合中最后一个类
                {
                    item.SetSuccessor(item = list[i + 1]);//这里设置上下级
                }
                else
                {
                    item1.HandleRequest(endynamic);//执行职责链
                }
            }

最后:职责链的功能很明确,每一个职责都有自己要做的事情,所以用职责链的功能一般是一个连串性的,但是如果我们想添加一个新的职责就会破开开闭原则,但是这个反射的出现就把这个问题解决了,而且以后我们不管添加多少职责都没有问题,又不会更改代码,只需更改配置文件的顺序就行,

相关文章
|
5月前
|
设计模式 SQL 安全
【设计模式】第二篇:单例模式的几种实现And反射对其的破坏
一个普通实例化,一个反射实例化 但是我们如果通过反射的方式进行实例化类,会有什么问题呢? public static void main(String[] args) throws Exception { Lazy1 lazy1 = getLazy1();
37 5
|
设计模式 Java 数据库连接
设计模式系列教程(01) - 反射机制(一)
设计模式系列教程(01) - 反射机制(一)
54 0
设计模式系列教程(01) - 反射机制(一)
|
设计模式 存储 Java
设计模式系列教程(02) - 反射机制(二)
设计模式系列教程(02) - 反射机制(二)
75 0
|
设计模式 Java 应用服务中间件
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——职责链/责任链模式(Chain of Responsibility)(原理讲解+应用场景介绍+案例介绍+Java代码实现)
143 0
|
设计模式 缓存 Java
Java反射(反射与代理设计模式、反射与Annotation、自定义Annotation、反射整合工厂设计模式和代理设计模式)
1.反射与代理设计模式,2.反射与Annotation,3.自定义Annotation,4.Annotation整合工厂设计模式和代理设计模式
72 0
|
设计模式 Java 程序员
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
106 0
为什么程序员喜欢用大量的if... ...else if ;不喜欢用设计模式+反射+自定义注解
|
设计模式 Java
【设计模式】Java设计模式 - 反射机制
反射的应用机制广泛,能够配置类的全限定名(包名 + 类型名)、方法和参数,完成对象的初始化,并且可以大大增强Java的可配置性,SpringIOC的基本原理就是如此。
168 0
【设计模式】Java设计模式 - 反射机制
|
设计模式 Java 开发者
Java学习路线-32:ClassLoader类加载器反射与代理设计模式
Java学习路线-32:ClassLoader类加载器反射与代理设计模式
164 0
|
设计模式 Java 开发者
反射与工厂设计模式|学习笔记
快速学习 反射与工厂设计模式
184 0
反射与工厂设计模式|学习笔记
|
设计模式 Java 开发者
反射与单例设计模式|学习笔记
快速学习反射与单例设计模式
109 0
反射与单例设计模式|学习笔记

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    42
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    53
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    37
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    61
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    56
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    40
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    49
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    105
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    75