Chain of Responsibility(责任链)java实现

package ChainofResponsibility.MyTest;

public class MyTest {

	/**Chain of Responsibility(责任链)
	 * @param args
	 */
	public static void main(String[] args) {
		AbstractRequest ar1=new CookRequest("发出做饭命令");
		AbstractRequest ar2=new EatRequest("发出吃饭命令");
		AbstractRequest ar3=new WishRequest("发出洗碗命令");
		AbstractHandler ah1=new CookHandler();
		AbstractHandler ah2=new EatHandler();
		AbstractHandler ah3=new WishHandler();
		ah1.setNextRequest(ah2);
		ah2.setNextRequest(ah3);
		ah1.Handler(ar1);
//		ah1.HandlerRequest(ar3);
	}
}


package ChainofResponsibility.MyTest;

public enum Level {
	LEVEL_1, LEVEL_2, LEVEL_3, LEVEL_4, LEVEL_5, LEVEL_6, LEVEL_7;
	private  int reutrnLevel(Level rl) {
		switch (rl) {
		case LEVEL_1:
			return 1;
		case LEVEL_2:
			return 2;
		case LEVEL_3:
			return 3;
		case LEVEL_4:
			return 4;
		case LEVEL_5:
			return 5;
		case LEVEL_6:
			return 6;
		case LEVEL_7:
			return 7;
		}
		return 0;
	}
	public byte CompareSuper(Level rl)
	{
		if(reutrnLevel(this)>reutrnLevel(rl))
		{
			return 1;
		}else if(reutrnLevel(this)==reutrnLevel(rl))
		{
			return 0;
		}else{
			return -1;
		}
	}
}

package ChainofResponsibility.MyTest;

public abstract class AbstractHandler {
	AbstractHandler nexthandler;

	public void setNextRequest(AbstractHandler nexthandler) {
		this.nexthandler = nexthandler;
	}

	/** 按一定的方法处理请求 * */
	public final void HandlerRequest(AbstractRequest request) {
		if (request.getRequestLevel() == this.getHandlerLevel()) {
			this.Handler(request);
			return;
		} else {
			if(nexthandler != null)
			{
				if(request.getRequestLevel().CompareSuper(this.nexthandler.getHandlerLevel())==1)
				{
					System.out.println("方法不能直接执行"+request.getContent()+",必须先执行前一个任务:\n"+this.nexthandler.getContent());
					this.nexthandler.HandlerRequest(request);
				}else if(request.getRequestLevel().CompareSuper(this.nexthandler.getHandlerLevel())==0){
					System.out.println("可以执行方法:");
					this.nexthandler.Handler(request);
				}else{
					System.out.println("不符合逻辑的任务");
				}
			}else{
				if(request.getRequestLevel().CompareSuper(this.getHandlerLevel())==-1)
				{
					System.out.println("不符合逻辑的任务");
				}else{
					System.out.println("无法完成任务");
				}
			}
		}
	}
	public abstract String getContent();

	public abstract Level getHandlerLevel();
	
	/** 具体请求的方法 * */
	public abstract void Handler(AbstractRequest request);
}

package ChainofResponsibility.MyTest;

public class CookHandler extends AbstractHandler {

	@Override
	public void Handler(AbstractRequest request) {
		System.out.println("正在做饭");
	}

	@Override
	public Level getHandlerLevel() {
		return Level.LEVEL_1;
	}

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return "正在做饭";
	}

}

package ChainofResponsibility.MyTest;

public class EatHandler extends AbstractHandler {

	@Override
	public void Handler(AbstractRequest request) {
		// TODO Auto-generated method stub
		System.out.println("正在吃饭");
	}

	@Override
	public Level getHandlerLevel() {
		// TODO Auto-generated method stub
		return Level.LEVEL_2;
	}

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return "正在吃饭";
	}

}

package ChainofResponsibility.MyTest;

public class WishHandler extends AbstractHandler {

	@Override
	public void Handler(AbstractRequest request) {
		System.out.println("正在洗碗");
	}

	@Override
	public Level getHandlerLevel() {
		return Level.LEVEL_3;
	}

	@Override
	public String getContent() {
		// TODO Auto-generated method stub
		return "正在洗碗";
	}
}

package ChainofResponsibility.MyTest;

public abstract class AbstractRequest {
	String content;
	public AbstractRequest(String content) {
		this.content = content;
	}

	public abstract Level getRequestLevel();

	public String getContent() {
		return content;
	}
}

package ChainofResponsibility.MyTest;

public class CookRequest extends AbstractRequest {
	
	public CookRequest(String content) {
		super(content);
	}

	@Override
	public Level getRequestLevel() {
		return Level.LEVEL_1;
	}

}

package ChainofResponsibility.MyTest;

public class EatRequest extends AbstractRequest {
	
	public EatRequest(String content) {
		super(content);
	}

	@Override
	public Level getRequestLevel() {
		return Level.LEVEL_2;
	}

}

package ChainofResponsibility.MyTest;

public class WishRequest extends AbstractRequest {
	
	public WishRequest(String content) {
		super(content);
	}

	@Override
	public Level getRequestLevel() {
		return Level.LEVEL_3;
	}
	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值