应用场景:
当客户端提交一个请求时,请求是沿着链传递的,只到有对象能够处理它。请求的发送者和接受者都没有对方的明确信息,可简化对象的相互连接,仅仅需保持一个指向后继者的引用即可。
这里以员工加薪的申请过程来说明:
/**
* 请求
* @author ZhangSheng
*
*/
public class Request {
public double price;
public Request(double price) {
super();
this.price = price;
}
public Request() {
super();
};
}
-----------------------------------------------------------------------------------------------------------------
/**
* 处理的抽象方法
* @author ZhangSheng
*
*/
public abstract class Dispose {
public abstract void disPose();
}
------------------------------------------------------------------------------------------------------------------
public class ProjectManager extends Dispose {
public Request request;
public ProjectManager(Request request, DepartmentManager nextDisposer,
boolean isSuccess) {
super();
this.request = request;
this.nextDisposer = nextDisposer;
this.isSuccess = isSuccess;
}
private DepartmentManager nextDisposer;
@Override
public void disPose() {
System.out.println("项目经理能批准的额度500");
if (request.price <= 500) {
if (isSuccess) {
System.out.println("项目经理同意");
} else {
System.out.println("项目经理不同意");
}
} else {
System.out.println("项目经理提交上去");
nextDisposer.disPose();
}
}
public boolean isSuccess;
}
-----------------------------------------------------------------------------------------------
public class DepartmentManager extends Dispose {
public Request request;
public DepartmentManager(Request request, GeneralManager nextDisposer,
boolean isSuccess) {
super();
this.request = request;
this.nextDisposer = nextDisposer;
this.isSuccess = isSuccess;
}
private GeneralManager nextDisposer;
@Override
public void disPose() {
System.out.println("部门经理能批准的额度1000");
if (request.price <= 1000) {
if (isSuccess) {
System.out.println("部门经理同意");
} else {
System.out.println("部门经理不同意");
}
} else {
System.out.println("部门经理提交上去");
nextDisposer.disPose();
}
}
public boolean isSuccess;
}
------------------------------------------------------------------------------------------------------
public class GeneralManager extends Dispose {
public Request request;
public GeneralManager(Request request,
boolean isSuccess) {
super();
this.request = request;
this.isSuccess = isSuccess;
}
@Override
public void disPose() {
if (isSuccess) {
System.out.println("总经理同意");
} else {
System.out.println("总经理不同意");
}
}
public boolean isSuccess;
}
------------------------------------------------------------------------------------------
/**
* 请求的申请者
* @author ZhangSheng
*
*/
public class RequestManager {
private Request request;
private ProjectManager projectManager;
public RequestManager(Request request, ProjectManager projectManager) {
super();
this.request = request;
this.projectManager = projectManager;
}
public void requestAddSalary(){
System.out.println("请求加薪:"+request.price);
projectManager.disPose();
}
}
-----------------------------------------------------------------------------------------------------------
public class Test {
/**
* @测试类
*/
public static void main(String[] args) {
Request request = new Request(1200);
boolean isSuccess_generalManager = true;
boolean isSuccess_projectManager = false;
boolean isSuccess_departmentManager = false;
GeneralManager generalManager = new GeneralManager(request,
isSuccess_generalManager);
DepartmentManager departmentManager = new DepartmentManager(request,
generalManager , isSuccess_departmentManager);
ProjectManager projectManager = new ProjectManager(request,
departmentManager , isSuccess_projectManager);
RequestManager requestManager = new RequestManager(request,
projectManager);
requestManager.requestAddSalary();
}
}