您的位置:首页 > 其它

责任链模式

2014-05-27 10:38 351 查看

概念不多说,直接上代码,供大家一看

功能描述:员工请假申请,先向 PM 申请,如果 PM 同意则通过,如果 PM 不同意则提交给 HR ... HR 不同意则提交给 CEO ,这是一个典型的责任链模式。

1 请假类(请假时间,请假原因)

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: Request
* @Description: 请假申请类
* @author ZhouQian zhouqian@cnsesan.com
* @date 2013-8-29-上午9:49:13
********************************************************************************************
*/
class Request
{
private int day;
private String reason;

public Request(int day,String reason){
this.day = day;
this.reason = reason;
}

public int getDay() {
return day;
}

public void setDay(int day) {
this.day = day;
}

public String getReason() {
return reason;
}

public void setReason(String reason) {
this.reason = reason;
}

}


责任链处理抽象类:

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: Boss
* @Description: 责任链处理抽象类
* @author ZhouQian zhouqian@cnsesan.com
* @date 2013-8-29-上午9:52:46
********************************************************************************************
*/
public abstract class Boss {
private String name;
private Boss successor;

public Boss(String name){
this.name = name;
}
public abstract boolean PassRequest(Request request);

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Boss getSuccessor() {
return successor;
}

public void setSuccessor(Boss successor) {
this.successor = successor;
}
}


PM

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: PM
* @Description: TODO
* @author ZhouQian zhouqian@cnsesan.com
* @date 2013-8-29-上午9:54:24
********************************************************************************************
*/
public class PM extends Boss {

public PM(String name) {
super(name);
}

@Override
public boolean PassRequest(Request request) {
int day = request.getDay();
if( day <= 0.5 ){
System.out.println("PM:同意申请");
return true;
}else{
System.out.println("PM:权限不足,将申请反馈上级");
return getSuccessor().PassRequest(request);
}
}

}


HR

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: HR
* @Description: TODO
* @author ZhouQian zhouqian@cnsesan.com
* @date 2013-8-29-上午10:04:47
********************************************************************************************
*/
public class HR extends Boss {

public HR(String name) {
super(name);
}

@Override
public boolean PassRequest(Request request) {
int day = request.getDay();
if( day > 0.5 && day<=2 ){
System.out.println("HR:同意申请");
return true;
}else{
System.out.println("HR:权限不足,将申请反馈上级");
return getSuccessor().PassRequest(request);
}

}

}


CEO

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: CEO
* @Description: TODO
* @author ZhouQian zhouqian@cnsesan.com
* @date 2014-5-27-上午10:11:02
********************************************************************************************
*/
public class CEO extends Boss{

public CEO(String name) {
super(name);
}
@Override
public boolean PassRequest(Request request) {
int day = request.getDay();
if( day > 2 && day <= 6){
System.out.println("CEO:同意申请");
return true;
}else{
System.out.println("CEO:申请时间过长不同意申请");
return false;
}

}

}


请假申请类(组装责任链)

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: LeaveProcessor
* @Description: 请假申请处理类
* @author ZhouQian zhouqian@cnsesan.com
* @date 2014-5-27-上午10:21:32
********************************************************************************************
*/
public class LeaveProcessor {
public boolean process(Request request){
PM pm  = new PM("项目经理");
HR hr = new HR("人事");
CEO ceo = new CEO("董事会");
hr.setSuccessor(ceo);
pm.setSuccessor(hr);
return pm.PassRequest(request);
}
}


客户端,用户提交申请类,MAIN 入口

package com.zhouqian.pattern.filterchain2;
/**
********************************************************************************************
* @ClassName: Client
* @Description: TODO
* @author ZhouQian zhouqian@cnsesan.com
* @date 2014-5-27-上午10:07:01
********************************************************************************************
*/
public class Client {
public static void main(String[] args) {
Request request = new Request(-1, "生病!");
LeaveProcessor processor = new LeaveProcessor();
processor.process(request);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: