Java责任链模式

优点:

  • 降低耦合,将请求发送和接收解耦
  • 简化了对象
  • 增强给对象指派职责灵活性
  • 增加新的请求处理方便

缺点:

  • 不能保证请求一定被接收
  • 性能受到影响,循环调用

Handler处理者

package commemory.chain;

/**
 * 责任链 ,定义职责对象的接口
 * 
 * @author Administrator
 *
 */
public abstract class Handler {
	/**
	 * 下一个处理请求的对象
	 */
	private Handler mHandler;
	/**
	 * 
	 * 持有级别
	 */
	protected Level mLevel;

	public final void handleMessage(Request request) {
		System.out.println("当前所属级别" + this.mLevel);
		if (request.getLevel() == this.mLevel) {
			holiday();
		} else if (this.mHandler != null) {
			this.mHandler.handleMessage(request);

		} else {
			failure();
		}
	}

	/**
	 * 设置下一个责任人
	 * 
	 * @param handler
	 */
	public Handler setHandler(Handler handler) {
		this.mHandler = handler;
		return mHandler;
	}

	/**
	 * 设置下一个请求
	 * 
	 * @param level
	 */
	public void setLevel(Level level) {
		this.mLevel = level;
	}

	protected abstract void config();

	/**
	 * 批假天数,具体任务
	 * 
	 * @return
	 */
	public abstract String holiday();

	private void failure() {
		System.out.println("请假时间太长,不批哈哈!");
	}
}

package commemory.chain;

/**
 * 级别
 * 
 * @author Administrator
 *
 */
public enum Level {
	NONE, // 没有权限
	GOUPLD, // 组长
	MANAGER, // 经
	BOSS // boss
}

具体处理者

package commemory.chain;

/**
 * 老大
 * 
 * @author Administrator
 *
 */
public class BossHandler extends Handler {

	public BossHandler() {
		// TODO Auto-generated constructor stub
		config();
	}

	/**
	 * 初始化配置
	 */
	protected void config() {
		setLevel(Level.BOSS);
	}

	@Override
	public String holiday() {
		// TODO Auto-generated method stub
		System.out.println("大boos批假");
		return "批假5~10天";
	}

}

package commemory.chain;

/**
 * 组长
 * 
 * @author Administrator
 *
 */
public class GroupLdHandler extends Handler {

	public GroupLdHandler() {
		// TODO Auto-generated constructor stub
		config();
	}

	@Override
	protected void config() {
		// TODO Auto-generated method stub
		setLevel(Level.GOUPLD);
	}

	@Override
	public String holiday() {
		// TODO Auto-generated method stub
		System.out.println("组长批假");
		return "批假1~2天";
	}

}

package commemory.chain;

/**
 * 组长
 * 
 * @author Administrator
 *
 */
public class ManagerHandler extends Handler {

	public ManagerHandler() {
		// TODO Auto-generated constructor stub
		config();
	}

	@Override
	protected void config() {
		// TODO Auto-generated method stub
		setLevel(Level.MANAGER);
	}

	@Override
	public String holiday() {
		// TODO Auto-generated method stub
		System.out.println("经理批假");
		return "批假3~5天";
	}

}

请求者

package commemory.chain;

/**
 * 请求
 * 
 * @author Administrator
 *
 */
public class Request {
	Level mLevel;

	public void config(int day) {
		Level object = Level.NONE;
		if (day > 6) {
			object = Level.BOSS;
		} else if (day > 2) {
			object = Level.MANAGER;
		} else if (day > 0) {
			object = Level.MANAGER;
		}
		// 最多批10天假
		if (day > 10) {
			object = Level.NONE;
		}
		mLevel = object;
	}

	public Level getLevel() {
		return mLevel;
	}
}

测试

// 责任链模式 ?
		GroupLdHandler gp = new GroupLdHandler();
		ManagerHandler mg = new ManagerHandler();
		BossHandler boss = new BossHandler();
		gp.setHandler(mg).setHandler(boss);
		Request request = new Request();
		request.config(13);
		gp.handleMessage(request);

//输出结果 
启动应用成功!开启美好的一天
当前所属级别GOUPLD
当前所属级别MANAGER
当前所属级别BOSS
请假时间太长,不批哈哈!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值