责任链(一)

本文介绍了责任链模式的应用场景及其实现方式。通过抽象处理者和具体处理者的角色定义,展示了如何利用该模式来处理请求,并提供了Java代码示例。适用于需要动态指定请求处理者集合的情况。

一.例子:击鼓传花、IE浏览器中的事件冒泡、struts2拦截器?

二.涉及角色:

1.抽象处理者(Handler)角色、定义出一个处理请求的接口;如果需要,接口可以定义出一个方法,以返回对下家的引用,下图给出了一个示意性的类图:

package com.se.design.chainofresp;

public abstract class Handler {

	protected Handler successor;
	
	//处理方法
	public abstract void handlerRequest();

	public Handler getSuccessor() {
		return successor;
	}

	public void setSuccessor(Handler successor) {
		this.successor = successor;
	}

}

2.具体处理者(ConcreteHandler)角色、处理接到请求后,可以选择将请求处理掉,或者将请 求传给下家。下图给出了一个示意性的类图:

package com.se.design.chainofresp;

public class ConcreteHandler extends Handler {

	@Override
	public void handlerRequest() {
		// TODO Auto-generated method stub
		if (getSuccessor() != null)
		{
			System.out.println(getSuccessor());
			getSuccessor().handlerRequest();
		}
		else
			System.out.println("end");
	}

}

三.使用责任链模式:
  1.系统已经有一个由处理者对象组成的链。这个链可能由复合模式给出,
  2.当有多于一个的处理者对象会处理一个请求,而且在事先并不知道到底由哪一个处理者对象处理一个请求。这个处理者对象是动态确定的。
     3.当系统想发出一个请求给多个处理者对象中的某一个,但是不明显指定是哪一个处理者对象会处理此请求。
  4.当处理一个请求的处理者对象集合需要动态地指定时。

转载于:https://my.oschina.net/vfan140/blog/55000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值