责任链模式是一种对象的行为模式,在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条莲。请求在这个链上传递,直到链上的某个对象决定处理此请求。
既然是设计模式,必然有其鲜明代码的主体框架,如下:
首先定义一个抽象的处理角色Handler,其次是具体实现类ConcreteHandler,在ConcreteHandler我们通过getNextHandler()来判断是否还有下一个责任链,如果有则继续传递下去,通过getNextHandler().doHandler()。
下面我们以一个简单的报销流程:项目经理—->部门经理—->总经理。
项目经理不能批大于500的报销,项目经理不能报销1000的,超过1000的要总经理
//抽象角色类
public abstract class ConsumeHandler
{
private ConsumeHandler nextHandler;
public ConsumeHandler getNextHandler()
{
return nextHandler;
}
public void setNextHandler(ConsumeHandler handler)
{
nextHandler = handler;
}
public abstract void doHandler(String name ,double free);
}
//具体实现类
public class ProjectHandler extends ConsumeHandler
{
@override
public void doHandler(String name ,double free)
{
if(free=<500)
{
System.out.println(name + "给予报销");
}
else
{
if(getNextHandler()!= null)
{
getNextHandler().doHandler(name,free);
}
}
}
}
public class DeptHandler extends ConsumeHandler
{
@override
public void doHandler(String name ,double free)
{
if(free<1000)
{
System.out.println(name + "给予报销");
}
else
{
if(getNextHandler()!= null)
{
getNextHandler().doHandler(name,free);
}
}
}
}
public class GenwralHandler extends ConsumeHandler
{
@override
public void doHandler(String name ,double free)
{
if(free>=1000)
{
System.out.println(name + "给予报销");
}
else
{
if(getNextHandler()!= null)
{
getNextHandler().doHandler(name,free);
}
}
}
}
//测试一下
public class Test
{
public static void main(String[] args)
{
ProjectHandler projectHandler = new ProjectHandler();
DeptHandler deptHandler = new DeptHandler();
GeneralHandler generalHandler = new GeneralHandler();
projectHandler.setNextHandler(deptHandler);
deptHandler.setNextHandler(generalHandler);
projectHandler.doHandler("lwx",250.00);
projectHandler.doHandler("lwx",550.00);
projectHandler.doHandler("lwx",1250.00);
}
}