http://www.books.com.tw/products/0010750585
chap18.
責任鍊模式 Chain Of Responsbility
目的:讓不同的物件有機會能處理同一個請求
package com.ssc24.chap18.demo01;
public abstract class Manager {
protected String name;
protected Manager superior;
public Manager(String name) {
this.name = name;
}
public void setSuperior(Manager superior) {
this.superior = superior;
}
public abstract void apply(ApplyRequest request);
}
package com.ssc24.chap18.demo01;
public class CommonManager extends Manager {
public CommonManager(String name) {
super(name);
}
@Override
public void apply(ApplyRequest request) {
if ("請假".equals(request.getRequestType()) && request.getRequestCount() <= 2) {
System.out.println(request.getRequestType() + ":" + request.getRequestContent() + " " +
request.getRequestCount() + "天 被" + name + " 批准");
} else {
if (superior != null) {
superior.apply(request);
}
}
}
}
package com.ssc24.chap18.demo01;
public class GeneralManager extends Manager {
public GeneralManager(String name) {
super(name);
}
@Override
public void apply(ApplyRequest request) {
if ("請假".equals(request.getRequestType())) {
System.out.println(request.getRequestType() + ":" + request.getRequestContent() + " " +
request.getRequestCount() + "天 被" + name + " 批准");
} else {
if (request.getRequestCount() <= 1000) {
System.out.println(request.getRequestType() + ":" + request.getRequestContent() + " " +
request.getRequestCount() + "元 被" + name + " 批准");
} else {
System.out.println(request.getRequestType() + ":" + request.getRequestContent() + " " +
request.getRequestCount() + "元 被" + name + " 駁回");
}
}
}
}
package com.ssc24.chap18.demo01;
public class Majordomo extends Manager {
public Majordomo(String name) {
super(name);
}
@Override
public void apply(ApplyRequest request) {
if ("請假".equals(request.getRequestType()) && request.getRequestCount() <= 5) {
System.out.println(request.getRequestType() + ":" + request.getRequestContent() + " " +
request.getRequestCount() + "天 被" + name + " 批准");
} else {
if (superior != null) {
superior.apply(request);
}
}
}
}
package com.ssc24.chap18.demo01;
public class ApplyRequest {
private String requestType;
private String requestContent;
private int requestCount;
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 getRequestCount() {
return requestCount;
}
public void setRequestCount(int requestCount) {
this.requestCount = requestCount;
}
}
package com.ssc24.chap18.demo01;
public class ManagerClient {
public static void main(String[] args) {
System.out.println("===責任鍊模式測試===");
Manager pm = new CommonManager("PM經理");
Manager gl = new Majordomo("總監");
Manager gm = new GeneralManager("總經理");
pm.setSuperior(gl);
gl.setSuperior(gm);
ApplyRequest request = new ApplyRequest();
request.setRequestType("請假");
request.setRequestContent("小菜請假");
request.setRequestCount(2);
pm.apply(request);
request.setRequestCount(4);
pm.apply(request);
request.setRequestType("加薪");
request.setRequestContent("小菜加薪");
request.setRequestCount(2000);
pm.apply(request);
request.setRequestCount(900);
pm.apply(request);
}
} /** ===責任鍊模式測試=== 請假:小菜請假 2天 被PM經理 批准 請假:小菜請假 4天 被總監 批准 加薪:小菜加薪 2000元 被總經理 駁回 加薪:小菜加薪 900元 被總經理 批准 **/