责任链模式

本文深入讲解了责任链设计模式,其核心在于使多个对象有机会处理请求,通过形成链式结构传递请求,直到被适当对象处理。文章详细阐述了模式的定义、优缺点,并提供了具体示例代码,展示了如何构建应答链表,实现请求与处理的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象形成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

优缺点

优点

  1. 请求和处理相互分离,两者解耦,提高系统的灵活性。
    缺点
  2. 当责任链比较长时,性能是一个非常大的问题,采用递归,调试逻辑比较复杂。

示例代码

/*
 * 请求类
 */
public  class Request
{
	 private int level;
	 private String requestMessage = "";
     public Request(int level,String message){
    	 this.level = level;
    	 this.requestMessage = message;
     }
     
     public int getLevel(){
    	 return this.level;
     }
     
     public String getRequest(){
    	 return this.requestMessage;
     }
}

/*
 * 抽象处理类
 */
public abstract class Handler
{
	public static final int ONE_LEVEl = 1;
	public static final int TWO_LEVEl = 2;
	public static final int THREE_LEVEl = 3;
	private int level = 0;
	private Handler next = null;
	public Handler(int level){
		this.level = level;
		
	}
	/**
	 * 处理链 可以做权限等等
	 * @param request
	 * @return
	 */
	public final String  handelMessage(Request request){
		String result = null;
		if(request.getLevel()==this.level){
			result = this.response(request.getRequest());
		} else if (next != null) {
			 result = next.handelMessage(request);
		}
		return result;
	}
	
	public abstract String response(String message);
	
	public void setNext(Handler handler){
		this.next = handler;
	}
	
	
	public static void main(String[]  args){
		Request request = new Request(3, "外出");
        TotalHandler totalHandler = new TotalHandler();
		String response = totalHandler.handelMessage(request);
		System.out.println(response);
		
	}
	
	/*
	 * 对外包装的一个类
	 */
	static class TotalHandler{
		private OneHandler oneHandler;
		private TwoHandler twoHandler;
		private ThreeHandler threeHandler;
		public TotalHandler(){
			oneHandler = new OneHandler(ONE_LEVEl);
			twoHandler = new TwoHandler(TWO_LEVEl);
			threeHandler = new ThreeHandler(THREE_LEVEl);
			oneHandler.setNext(twoHandler);
			twoHandler.setNext(threeHandler);
		}
		
		public String handelMessage(Request request){
			return oneHandler.handelMessage(request);			
		}
	}
}

/*
 * 具体的业务逻辑处理类,省略剩下的两个处理类
 */
public class OneHandler extends Handler
{

	public OneHandler(int level)
	{
		super(level);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String response(String message)
	{
		
		return "链1处理了:"+message+" 同意";
	}

}

核心思想就是构造一个应答链表,挨个递归遍历,遇到对应的请求就由对应的链节点进行应答。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值