职场小白初涉设计模式之责任链模式
2018-09-02 22:38
453 查看
最近,接到一个需求,在数据计算之前,根据需求的具体内容对数据进行过滤,保留下需要计算的那部分。
对于职场小白没经验的我来说,拿到需求,在确定于什么位置过滤数据以后,就开始义无反顾地码代码!!
怎么码呢?当然是建立需要过滤的接口及实现类,然后在里面进行过滤的具体操作。
由于过滤数据的两部分是对同一内容进行操作,于是在计算数据之前,
嗯,调用第一个实现类方法得到要过滤的内容,循环过滤数据,过滤第一部分;
再来调用第二个实现类方法得到要过滤的内容,循环过滤数据,过滤第二部分。
到这里,需求的功能性基本上算是完成了。但这样的方式好么?!
如果再来第三个第四个相同的过滤操作呢?!接着如上循环么?!
明眼人都能看出来这种方式存在了很大的代码冗余,效率并不是很高,
且后一部分的过滤在前一部分的过滤之后,耦合太紧,以后再看到的话肯定头疼。
于是,在同事亦师父的林哥的耐心指导下,开始以责任链的形式来优化这部分代码。
一、对责任链的理解
责任链模式(Chain of Responsibility Pattern)即为请求创建一个接收者对象的链,给与请求类型,将请求发送者与接收者之间进行解耦。请求的处理被每一个接收者进行接收并处理,如果能处理则按照接收者的既定规则处理,然后在该责任链上层层传递。也可以在每一个接收者中持有下一个接收者的引用,如果自己不能处理,则传给下一个进行处理。
请求由责任链上的每个接收者进行处理,因此,客户在传入请求之后,不需要关心接收者的处理细节以及如何传递的,这就实现了请求的发送者和请求接收者之间进行了解耦。
(一)大致实现
1、首先创建一个Handler类,其包含对请求进行处理的方法HandlerRequest();
2、对于不同的请求处理方式,创建其相应的接收者类,并继承并重写Handler父类中的HandlerRequest()方法,以自己的方式进行实现;
3、对于接收者类的传递上,是在每个接收者类中持有下一接收者的引用,这样处理不了的请求就传递给下一个接收者进行处理。
1 public class Main { 2 3 public static void main(String[] args) { 4 StringObj stringObj = new StringObj("责任链开始,"); 5 RuleChain chain = new RuleChain().addRule(new ConcreteHandlerA(stringObj)).addRule(new ConcreteHandlerB(stringObj)); 6 chain.handler(stringObj); 7 System.out.println(stringObj.getStr()); 8 } 9 } 10 11 ================================================== 12 责任链开始,ConcreteHandlerA接收者开始处理,前面字符串长度为30,ConcreteHandlerB处理完毕,责任链结束
View Code
三、责任链实现的设计模式六大原则体现
如上所示则为一个简答的责任链的大致实现过程。
1、通过上面的例子我们可以看到,每一个类只进行自己的那部分处理方式,符合设计模式的单一职责原则,实现了高内聚低耦合的方针;
2、在Main函数中的main方法中,对于RuleChain来说,我们只需在后续增加各个处理模块即可,然后在每个处理模块中实现自定义处理。在对各个处理模块的增加来说,我们只需实现IRule接口,并重写其handler方法,即可满足需求。这符合设计模式的开闭原则,即对扩展开放,对修改关闭。
3、接收者的各个类都统一实现了专门的IRule接口,而不会去实现不必要的其他接口,符合接口隔离原则;
4、接收者的handler方法都实现了IRule中的方法,IRule负责抽象方法,而具体的实现细节都放在了各个接收者内部进行处理,符合依赖倒置原则;
5、我们从上述例子中可以看到,接收者的类与类之间是不存在耦合的,其链接都是依靠RuleChain来进行的,因此符合迪米特法则,类与类之间的耦合性降低。
6、里氏替换原则在这里暂时不是很明显。
四、其他
大致先说到这里,后续再进行补充。
如有描述不足之处,请指教!
相关文章推荐
- 设计模式之责任链模式
- [设计模式]责任链模式(Chain of Resposibilty)
- 设计模式之--责任链模式
- 设计模式之 责任链模式
- 设计模式-行为型- 责任链模式(Chain of Responsibility)
- Java设计模式_行为型_责任链模式_差旅报销如此简单
- 【23种设计模式】行为型模式 > 责任链模式
- java设计模式17——责任链模式(Chain of Responsibility)
- JAVA设计模式---责任链模式
- 设计模式 之 责任链模式
- 【设计模式说开去系列】--责任链模式
- 重学java23种设计模式(13)责任链模式
- Groovy 设计模式 -- 责任链模式
- Java设计模式百例 - 责任链模式
- 设计模式——责任链模式(Chain Of Responsibility)
- 设计模式学习-每日一记(23.责任链模式)
- 【设计模式】之责任链模式
- PHP设计模式之责任链模式的深入解析
- Java设计模式总汇二(小白也要飞)