责任链模式初体验

昨天想到前段时间重构的代码,感觉不是很满意,用的是组合模式,前前后后把对象包裹的太复杂,而且如果以后继续扩展的话,想必会更加复杂,想想能不能使代码结构更简单些,于是决定用责任链模式来改造一下。

责任链模式,我的理解就是一连串的操作连成一条链,然后按照链的顺序来执行,这好像满足我的业务场景。责任链最常见于过滤器了,过滤器因为涉及到层层过滤,可能存在多个过滤器一起使用,这就是典型的责任链模式了。好了,来展示一个dome,顺便也让我来捋捋责任链的思路。

首先,有一个公用的接口(感觉所有的设计模式都是在接口操作的基础上完成的),接口定义了一个方法,所有操作链要实现的功能都写在这个方法里面:

责任链模式初体验

然后一个链类,链实现公用的接口,链类有一个list属性,用来保存操作链,然后有一个添加操作的方法,当然,还有一个接口方法的实现。但是。这个实现不是实现业务,而是获取下一个操作链,再去调用操作链的操作。

责任链模式初体验

各个操作链实现公用的接口,在方法里面实现对应的业务逻辑,然后在最后调用链的实现方法,获取下一个链,再调用下一个链的实现。。。。这样就实现了一整个责任链的实现了。

责任链模式初体验

调用的时候,我们先new一个链的对象,然后把要执行的操作添加进去,然后执行就行了。

责任链模式初体验

主要的调用过程是,链的方法——>获取具体操作链对象——>调用操作链的方法——>在操作链的最后会调用链的方法——>获取下一个具体操作链对象——>直到调用最后一个对象。

整个责任链的模式就实现了,实现起来很简单,设计模式主要的是其中的思想,责任链模式解决的主要业务场景是多个一连串的操作顺序执行,可以插拔式的改变操作链,代码耦合性比较低,思路也会很清晰。使用过程中也感觉出了一个缺点,那就是会创建很多个类,毕竟他一个操作就要创建一个类。当时想过用组合来解决这个问题,但是发现这样会让代码很混乱,总的来说还是思维跟不上,抽象能力还不够。