`
BestUpon
  • 浏览: 295091 次
  • 性别: 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. **责任链模式**:责任链模式是行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。在这个模式中,请求沿着处理者链进行传递,每个处理者都有机会处理请求,或者将请求传递...

    设计模式:职责链模式

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

    设计模式-责任链模式

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

    责任链模式(Chain of Responsibility Pattern) 1. 责任链模式概述 1.1 定义 1.2 基本思想 2. 责任链模式的结构 3. 责任链模式的UML类图 4. 责任链模

    1. 责任链模式概述 1.1 定义 1.2 基本思想 2. 责任链模式的结构 3. 责任链模式的UML类图 4. 责任链模式的工作原理 5. Java实现示例 5.1 基本实现示例 5.2 使用接口实现责任链模式 5.3 责任链模式在日志系统中的应用 ...

    责任链模式Demo

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

    责任链模式学习

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

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

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

    职责链模式模型代码

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

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

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

    第17章_职责链模式.ppt

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

    设计模式之责任链模式

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

    责任链模式例子

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

Global site tag (gtag.js) - Google Analytics