责任链模式是WBE中常用的一种模式,他的目的是使多个对象都有机会能够处理请求,避免请求的发送者和接受请求者之间的耦合关系,作用是解耦。
将这些对象串成一个链子,让请求沿着这个链子传递下去直到处理完成,他的实现很简单。
这里我们要讲学习设计模式就和打太极一样、切勿生搬硬套一定要符合设计模式什么的、设计模式只是传达一个思想,在实际应用中能够结合考虑,不一定要在设计中使用设计模式,只要复合软件设计原则的就可以。
设计链模式有两种实现方式
第一种是请求有单独的处理对象完成,如果完成不了那么就传递给下一个处理对象对象,直到完成且必须要完成。
第二种是请求经过每个处理对象,处理对象完成各自能够完成的处理传递给下一个对象。
责任链模式有两个主要角色
1.抽象处理者角色:定义处理请求的接口
2.具体处理这角色:继承抽象处理者角色,实现处理请求接口。
这里给大家提供例子例如web中常用的过滤器
抽象处理角色
/**
*
*/
package com.model.chain;
//抽象处理角色
public interface MessagesFilter {
//定义处理请求接口
public String doFilter(String msg);
}
具体抽象角色
/**
*
*/
package com.model.chain;
//session过滤
public class SessionFilter implements MessagesFilter {
private SensitiveFilter sensitive;
/* (non-Javadoc)
* @see com.model.chain.MessagesFilter#doFilter(java.lang.String)
*/
public SensitiveFilter getSensitive() {
return sensitive;
}
public void setSensitive(SensitiveFilter sensitive) {
this.sensitive = sensitive;
}
@Override
public String doFilter(String msg) {
System.out.println("这里过滤session");
//这里做了个死代码、只做个范例
if(true){
return "";
}else{
return getSensitive().doFilter(msg);
}
}
}
/**
*
*/
package com.model.chain;
//敏感词过滤
public class SensitiveFilter implements MessagesFilter {
/* (non-Javadoc)
* @see com.model.chain.MessagesFilter#doFilter(java.lang.String)
*/
@Override
public String doFilter(String msg) {
System.out.println("这里处理敏感词");
return "";
}
}
总结
责任链的最大好处就是降低了程序的耦合、提高程序的灵活性,但是他也有个缺点、所有的请求都要从链子的开头开始执行,可能会增加消耗,所以没有完美的设计模式,只能通过各种设计思想来设计出最合适的程序。