您的位置:首页 > 编程语言 > Java开发

《大话设计模式》java实现之责任链模式

2017-11-22 09:02 387 查看
责任链模式各个对象的下一个处理对象在客户端指定,可以自由组合,灵活性强,状态模式各状态则是在编译时设置,即在各状态对象中指定,可对比struts的filter。

另外,书中变量的命名如jingli、zongjian、zongjingli这些是为了让读者区分,实际上不推荐使用拼音命名,我觉得还不如在name属性中设置成经理、总监、总经理比使用金利、宗剑这些要好

UML



代码结构



public class Client {
public static void main(String[] args) {
CommonManager jinli = new CommonManager("金利");
Majordomo zongjian = new Majordomo("宗剑");
GeneralManager zongjingli = new GeneralManager("钟精励");
jinli.setSuperior(zongjian);
zongjian.setSuperior(zongjingli);

Request request = new Request();
request.setRequestType("请假");
request.setRequestContent("小菜请假");
request.setNumber(1);
jinli.requestApplications(request);

Request request2 = new Request();
request2.setRequestType("请假");
request2.setRequestContent("小菜请假");
request2.setNumber(4);
jinli.requestApplications(request2);

Request request3 = new Request();
request3.setRequestType("加薪");
request3.setRequestContent("小菜请求加薪");
request3.setNumber(500);
jinli.requestApplications(request3);

Request request4 = new Request();
request4.setRequestType("加薪");
request4.setRequestContent("小菜请求加薪");
request4.setNumber(1000);
jinli.requestApplications(request4);
}
}


public class CommonManager extends Manager {

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

@Override
public void requestApplications(Request request) {
if("请假".equals(request.getRequestType()) && request.getNumber() <= 2) {
System.out.println(name + ":" + request.getRequestContent() + "数量" +
request.getNumber() + "被批准");
} else {
if(getSuperior() != null) {
getSuperior().requestApplications(request);
}
}
}

}


//总经理
public class GeneralManager extends Manager {

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

@Override
public void requestApplications(Request request) {
if("请假".equals(request.getRequestType())) {
System.out.println(name + ":" + request.getRequestContent() + "数量" +
request.getNumber() + "被批准");
} else if("加薪".equalsIgnoreCase(request.getRequestType()) && request.getNumber() <= 500){
System.out.println(name + ":" + request.getRequestContent() + "数量" +
request.getNumber() + "被批准");
} else if("加薪".equalsIgnoreCase(request.getRequestType()) && request.getNumber() > 500){
System.out.println(name + ":" + request.getRequestContent() + "数量" +
request.getNumber() + "再说吧");
}
}

}


//总监
public class Majordomo extends Manager {

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

@Override
public void requestApplications(Request request) {
if("请假".equals(request.getRequestType()) && request.getNumber() <= 5
) {
System.out.println(name + ":" + request.getRequestContent() + "数量" +
request.getNumber() + "被批准");
} else {
if(getSuperior() != null) {
getSuperior().requestApplications(request);
}
}
}

}


public abstract class Manager {
protected String name;

public Manager(String name) {
super();
this.name = name;
}

private Manager superior;

public Manager getSuperior() {
return superior;
}

public void setSuperior(Manager superior) {  //关键的方法
this.superior = superior;
}

public abstract void requestApplications(Request request);
}


public class Request {
//申请类别
private String requestType;
//申请内容
private String requestContent;
//数量
private int number;

public String getRequestType() {
return requestType;
}
public void setRequestType(String requestType) {
this.requestType = requestType;
}
public String getRequestContent() {
return requestContent;
}
public void setRequestContent(String requestContent) {
this.requestContent = requestContent;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}

}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: