java设计模式之——职责链模式

将一些对象串联成一条“链”,然后沿着这条“链”来传递请求,直到请求被执行或都“链”已传递到尽头才会返回值,这就是职责链模式了。

举一个例子:将 项目经理、总经理、老板组成一条“链”,然后项目人员要请求活动经费时向这条“链”发出请求,如果申请经费金额小于1000元,项目经理可以批,若金额大于1000小于5000,那就要总经理批准,大于5000就只有老板才有权批准了。下面给出这个例子的代码。

abstract class Handle
{
	protected Handle handle;
	protected String message = "";

	public void setHandle(Handle handle)
	{
		this.handle = handle;
	}

	/**
	 * 请求活动经费
	 * 
	 * @param name
	 *            请求者
	 * @param fee
	 *            请求金额
	 * @return
	 */
	public abstract String requestFee(String name, int fee);
}

/**
 * 项目经理,能批1000以下的活动经费
 * 
 * @author Administrator
 * 
 */
class ProjectManager extends Handle
{

	@Override
	public String requestFee(String name, int fee)
	{
		if (fee <= 1000)
		{
			if (name.equals("李明"))
			{
				this.message = "项目经理批准了李明申请的活动经费,金额为:" + fee;
			} else
			{
				this.message = "项目经理不批准" + name + "的申请";
			}

			return this.message;
		} else
		{
			if (this.handle != null)
			{
				return this.handle.requestFee(name, fee);
			}
		}
		return this.message;
	}

}

/**
 * 总经理,能批5000以下的活动经费
 * 
 * @author Administrator
 * 
 */
class GeneralManager extends Handle
{

	@Override
	public String requestFee(String name, int fee)
	{
		if (fee <= 5000)
		{
			if (name.equals("李明"))
			{
				this.message = "总经理批准了李明申请的活动经费,金额为:" + fee;
			} else
			{
				this.message = "总经理不批准" + name + "的申请";
			}

			return this.message;
		} else
		{
			if (this.handle != null)
			{
				return this.handle.requestFee(name, fee);
			}
		}
		return this.message;
	}

}

/**
 * 老板,能批所有数额的活动经费
 * 
 * @author Administrator
 * 
 */
class Boss extends Handle
{

	@Override
	public String requestFee(String name, int fee)
	{
		if (name.equals("李明"))
		{
			this.message = "老板批准了李明申请的活动经费,金额为:" + fee;
		} else
		{
			this.message = "老板不批准" + name + "的申请";
		}

		return this.message;
	}

}

/**
 * 测试类
 * 
 * @author Administrator
 * 
 */
public class Test
{
	public static void main(String[] args)
	{
		Handle projectManager = new ProjectManager();
		Handle generalManager = new GeneralManager();
		Handle boss = new Boss();
		//组成职责链
		projectManager.setHandle(generalManager);
		generalManager.setHandle(boss);
		
		//李明申请活动经费
		System.out.println(projectManager.requestFee("李明", 800));
		System.out.println(projectManager.requestFee("李明", 1500));
		System.out.println(projectManager.requestFee("李明", 8000));
		
		//王小明申请活动经费
		System.out.println(projectManager.requestFee("王小明", 800));
		System.out.println(projectManager.requestFee("王小明", 1500));
		System.out.println(projectManager.requestFee("王小明", 8000));

	}
}
屏幕打印结果如下:

项目经理批准了李明申请的活动经费,金额为:800

总经理批准了李明申请的活动经费,金额为:1500

老板批准了李明申请的活动经费,金额为:8000

项目经理不批准王小明的申请

总经理不批准王小明的申请

老板不批准王小明的申请


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值