设计23式—责任链

/*
 * 责任链模式
 * 优点
 * 将请求和处理分开,两者解耦,提高系统的灵活性。
 * 缺点
 * 性能问题,请求链比较长时,消耗性能打
 * 调试不很方便
 */
public class MyMain {

	public static void main(String[] args) {
		//定义三个级别的请求
		Handler handlerSSS=new HandlerSSS();
		Handler handlerSS=new HandlerSS();
		Handler handlerS=new HandlerS();
		//设置处理顺序
		handlerS.setNextHandler(handlerSS);
		handlerSS.setNextHandler(handlerSSS);
		//生成一个等级请求,并申请处理
		AbstractRequest requestS=new RequestS();
		AbstractRequest requestSS=new RequestSS();
		AbstractRequest requestSSS=new RequestSSS();
		AbstractRequest requestSSSS=new RequestSSSS();
		System.out.println("***********************");
		System.out.println("开始处理S级请求-----------------------");
		handlerS.HandleMessage(requestS);
		System.out.println("S级请求处理结束---------------------");
		System.out.println("***********************");
		System.out.println("开始处理SS级请求--------------------");
		handlerS.HandleMessage(requestSS);
		System.out.println("SS级请求处理结束-------------------");
		System.out.println("***********************");
		System.out.println("开始处理SSS级请求---------------------");
		handlerS.HandleMessage(requestSSS);
		System.out.println("SSS级请求处理结束---------------------");
		System.out.println("***********************");
		System.out.println("开始处理SSSS级请求---------------------");
		handlerS.HandleMessage(requestSSSS);
		System.out.println("SSSS级请求处理结束---------------------");
		System.out.println("***********************");
	}

}
//抽象的处理请求类(处理者)
abstract class Handler{
	//能处理请求的级别
	private int level=0;
	//不能处理时将请求发往下一个处理请求对象
	private Handler nextHandler;
	//决定是否能够处理请求
	public final void HandleMessage(AbstractRequest request) {
		//判断是否能够处理该请求
		if(request.getLevel()==this.level)
			response(request);
		else {
			if(this.nextHandler!=null)
			{
				System.out.println("处理等级不足,调用下一个处理类。");
				//给下一个处理类处理
				this.nextHandler.HandleMessage(request);
			}	
			else {
				System.out.println("没有后续处理了");
			}
		}
	}
	//处理请求
	abstract protected void response(AbstractRequest request);
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
	public Handler getNextHandler() {
		return nextHandler;
	}
	public void setNextHandler(Handler nextHandler) {
		this.nextHandler = nextHandler;
	}
	
}
//抽象的请求类
abstract class AbstractRequest{
	//请求等级
	int level=0;
	//请求内容
	String content="";
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
}
class HandlerSSS extends Handler{
	//设置处理等级1
	public HandlerSSS() {
		setLevel(1);
	}
	@Override
	protected void response(AbstractRequest request) {
		System.out.println("请求内容是:"+request.getContent());
		System.out.println("SSS级别处理类开始处理该请求");
	}
}
class HandlerSS extends Handler{
	//设置处理等级2
	public HandlerSS() {
		setLevel(2);
	}
	@Override
	protected void response(AbstractRequest request) {
		System.out.println("请求内容是:"+request.getContent());
		System.out.println("SS级别处理类开始处理该请求");
	}
}
class HandlerS extends Handler{
	//设置处理等级3
	public HandlerS() {
		setLevel(3);
	}
	@Override
	protected void response(AbstractRequest request) {
		System.out.println("请求内容是:"+request.getContent());
		System.out.println("S级别处理类开始处理该请求");
	}
}
class RequestSSSS extends AbstractRequest{
	public RequestSSSS() {
		setLevel(0);
		setContent("这是SSSS级请求");
	}
}
class RequestSSS extends AbstractRequest{
	public RequestSSS() {
		setLevel(1);
		setContent("这是SSS级请求");
	}
}
class RequestSS extends AbstractRequest{
	public RequestSS() {
		setLevel(2);
		setContent("这是SS级请求");
	}
}
class RequestS extends AbstractRequest{
	public RequestS() {
		setLevel(3);
		setContent("这是S级请求");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值