`
BestUpon
  • 浏览: 290094 次
  • 性别: Icon_minigender_1
  • 来自: 兰州
社区版块
存档分类
最新评论

责任链模式一

阅读更多

责任链模式(Chain of Responsibility)是Web项目中最经常用到的一个设计模式,比如是Apache Tomcat 的对Encoding的 处理,Struts2 的拦截器, jsp servlet 的Filter 等等,都是基于责任链模式设计的。比如有一个作业任务,先有一个对象对其负责处理,之后又交给其他的一个对象处理,一次传递下去,这是最通俗最简单的责任链模式的应用。但是责任链模式不仅仅的的就局限于这一种的最简单的应用,比如通信领域的短信验证码的获取,请求验证码---->发送验证码-----> 处理验证码----->提交验证码----->得到结果 等等的应用都和责任链模式密布可分。不一定非要在设计中就是用设计模式,但是联系联系周围的环境,思考思考周边的应用,自然的规律的轮回,都都感觉和设计模式有瓜葛。

 现在就模拟对网站信息处理的字符处理展示下什么是责任链模式:

需要准备一下几个类:

 Filter :处理过滤信息的过滤接口类

/**
 * @author Bestupon
 * @EMail : bestupon@foxmail.com
 *	处理过滤信息的过滤接口类
 */
public interface Filter {
	public String doFilter(String msg) ;
}

 

HTMLFilter负责专门过滤HTML代码的过滤器 实现了Filter 接口

package org.bestupon.pd.filter;
/**
 * 
 * @author Bestupon
 * @EMail : bestupon@foxmail.com
 *	负责专门过滤HTML代码的过滤器 实现了Filter 接口
 */
public class HtmlFilter implements Filter {

	@Override
	public String doFilter(String msg) {
		String result = msg.replace("<", "[").replace(">", "]");
		return result;
	}

}

 

 SesitiveFilter  :负责了处理敏感词汇的过滤器 实现了Filter 接口

package org.bestupon.pd.filter;
/**
 * 
 * @author Bestupon
 * @EMail : bestupon@foxmail.com
 *	负责了处理敏感词汇的过滤器 实现了Filter 接口
 */
public class SesitiveFilter  implements Filter{

	@Override
	public String doFilter(String msg) {
		return msg.replaceAll("敏感", "普通词汇");
	}

}

 

 

package org.bestupon.pd.filter;

import java.util.ArrayList;
import java.util.List;
/**
 * 
 * @author Bestupon
 * @EMail : bestupon@foxmail.com
 *	负责了处理敏感词汇的过滤器 实现了Filter 接口
 * 实现Filter 接口的主要原因是:将自身也设计成一个Filter,容易构建一个chain。
 */
public abstract class AbsractFilterChian implements Filter {
	public List<Filter> filters = new ArrayList<Filter>();
	public abstract String doFilter(String msg) ;
	public abstract AbsractFilterChian addAbsractFilterChian(Filter filter);
}

 

 

package org.bestupon.pd.filter;
/**
 * 
 * @author Bestupon
 * @EMail : bestupon@foxmail.com
 *	提供处理的对外统一接口
 */
public class MsgProcessor {
	/**
	 * 多个过滤器组合到一起之后就会形成过滤器链。
	 * 好处是过滤规则的排序,
	 * 先后顺序的的原因,新旧规则可以灵活的替换更新
	 * 责任链模式
	 */
	private AbsractFilterChian chian;

	public AbsractFilterChian getChian() {
		return chian;
	}

	public void setChian(AbsractFilterChian chian) {
		this.chian = chian;
	}
	private String msg;
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String process() {
		return chian.doFilter(msg);
	}
}

 

 

package org.bestupon.pd.filter;

import org.apache.log4j.Logger;

/**
 * 
 * @author Bestupon
 * @EMail : bestupon@foxmail.com 
 * 外部(客户端调用)
 */
public class Main {
	private static Logger log = Logger.getLogger(Main.class);

	public static void main(String[] args) {
		String msg = "<Script language='javascript'>javascript 代码</script> 敏感信息";
		AbsractFilterChian chian = new FilterChian();
		chian.addAbsractFilterChian(new HtmlFilter());
		AbsractFilterChian chian2 = new FilterChian();
		chian2.addAbsractFilterChian(new SesitiveFilter());

		chian.addAbsractFilterChian(chian2);

		MsgProcessor processor = new MsgProcessor();

		processor.setChian(chian);
		processor.setMsg(msg);
		log.info("HTML结果:" + processor.process());
	}

}

 

运行结果:16:50:37,640 INFO  [org.bestupon.pd.filter.Main] HTML结果:[Script language='javascript']javascript 代码[/script] 普通词汇信息

 

 

分享到:
评论
5 楼 climber2002 2010-06-18  
引用
比如通信领域的短信验证码的获取,请求验证码---->发送验证码-----> 处理验证码----->提交验证码----->得到结果 等等的应用都和责任链模式密布可分。


我第一直觉是用State模式
4 楼 climber2002 2010-06-18  
异常说得没错,你这个例子确实用错了,servlet的Filter是责任链模式,但你这个不是,你这个充其量算是Composite模式而已.
3 楼 BestUpon 2010-06-18  
weather 写道
/**
 * 	貌似chian 写错了.
 *	chian n. 沥青,柏油.
 *	chain n. 链;束缚;枷锁.
 *  2010/06/18 14:27:45
 */

的确写错了!应该是chain!
2 楼 抛出异常的爱 2010-06-18  
楼主再好好想个例子吧.....
这个例子用错了.
1 楼 weather 2010-06-18  
/**
 * 	貌似chian 写错了.
 *	chian n. 沥青,柏油.
 *	chain n. 链;束缚;枷锁.
 *  2010/06/18 14:27:45
 */

相关推荐

    【设计模式】之责任链模式1

    责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,而接收者可以在链中的任何位置处理该请求。这种模式的核心思想是将处理请求的对象组织成一个链条,每个对象(节点)都包含对下个处理者的...

    spring责任链模式详解

    1. **AOP(面向切面编程)**:在Spring AOP中,拦截器(Interceptor)就是一种责任链模式的应用。拦截器链可以按顺序调用,每个拦截器可以在方法调用前后执行自定义逻辑。如果一个拦截器不希望继续调用下一个拦截器...

    责任链模式1

    责任链模式是一种设计模式,它的主要目的是解耦请求的发送者和接收者,使得系统中的对象可以相互通信,而不必显式地指定接收者。在这种模式中,多个对象(称为处理者)形成一个链条,每个处理者都有能力处理请求或者...

    设计模式之职责链模式(ChainOfResponsibilityPattern)

    职责链模式(ChainOfResponsibilityPattern)是一种行为设计模式,主要目的是通过建立一个处理请求的对象链,使得请求可以在链上的各个对象间传递,直到被某个对象处理。这种模式可以有效地解耦请求发起者和处理者,...

    设计模式 - 职责链模式(C++实例)

    职责链模式(Chain of Responsibility)是一种行为设计模式,它的核心思想是将一系列处理请求的对象组织成一条链,每个对象都包含对请求的处理或传递的责任。在C++中实现职责链模式,我们可以创建一个抽象处理器类,...

    责任链模式代码

    责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    4. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...

    设计模式:职责链模式

    总的来说,职责链模式是一种非常实用的设计模式,它提供了一种方式来组织和分配责任,使得系统在处理请求时具有更好的灵活性和可扩展性。在实际开发中,例如在事件驱动系统、消息传递系统以及命令模式的实现中,职责...

    设计模式-责任链模式

    责任链模式是一种行为设计模式,它允许我们把请求沿着处理者对象的链式结构进行传递,直到某个对象处理这个请求。这种模式使得我们能够将请求的发送者与接收者解耦,同时也允许在运行时动态地改变处理顺序或添加新的...

    责任链模式Demo

    1. **Handler(处理器)**:这是责任链模式的基本单元,每一个处理器对象都有一个处理请求的方法,如`handleRequest()`。每个处理器可以处理特定类型的请求或执行特定操作。如果处理器无法处理当前请求,它会将请求...

    责任链模式学习

    责任链模式是一种行为设计模式,它允许我们定义一系列处理请求的对象,这些对象形成一个链,请求沿着这个链传递,直到某个对象能够处理它。这种方式使得我们可以将请求的发送者和接收者解耦,同时增加了系统扩展的...

    JAVA设计模式之行为模式 责任链模式和状态模式

    **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在“击鼓传花”的例子中,每个参与者都是链上的一个节点,当鼓声停止时,持有花束的参与者需要执行酒令,这就是责任链...

    职责链模式模型代码

    职责链模式(Chain of Responsibility)是一种行为设计模式,它允许我们沿着对象链传递请求,让每个对象决定是否处理这个请求,或者将请求传递给链中的下一个对象。在C#中,我们可以利用类和接口来实现这种模式。让...

    设计模式之责任链模式(Chain)

    责任链模式是一种行为设计模式,它的核心思想是将请求的发送者和接收者解耦,通过将多个处理对象串联成一个处理链,使得请求沿着这个链进行传递,直到被某个对象处理。这种模式使得系统更加灵活,可以在运行时动态...

    第17章_职责链模式.ppt

    【职责链模式】是行为型模式的一种,其主要动机是解耦请求的发送者和处理者。在职责链中,多个对象可以接收并处理同一个请求,这些对象形成一条链,请求沿着链传递,直到某个对象负责处理。这种方式减少了对象间的...

    设计模式之责任链模式

    责任链模式是一种行为设计模式,它允许我们把请求沿着处理者链进行传递,直到某个处理者处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,接收者也不知道其他处理者的存在...

    责任链模式例子

    责任链模式是一种设计模式,它允许我们通过定义一系列处理请求的对象来解耦发送者和接收者。在责任链模式中,每个对象都是链上的一个节点,可以处理请求的一部分或者将请求传递给链上的下一个对象。这种模式使得系统...

    设计模式之责任链模式Java实现

    责任链模式(Chain of Responsibility)是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求为止。在Java中,我们可以通过接口和类的组合来实现这种模式。让我们深入探讨...

Global site tag (gtag.js) - Google Analytics