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元 被總經理 批准 **/