责任链模式

来源:互联网 发布:山东黄金历史交易数据 编辑:程序博客网 时间:2024/06/01 10:49

目的:形成一个链式关系,更加体系化。

举例:员工请假,首先需要向部门经理提交请假条,如果请假天数大,那么就需要部门经理的领导来处理,这就是责任链模式

/** * 员工类 * @author tiger * */public class Employee {private String name;private int days;private String reason;public Employee(String name, int days, String reason) {super();this.name = name;this.days = days;this.reason = reason;}<span style="white-space:pre"></span>//以下是get/set方法}
/** * 领导抽象类 * @author tiger * */public abstract class Leader {protected String name;protected Leader nextLeader;public void setLeader(Leader nextLeader) {this.nextLeader = nextLeader;}public Leader(String name) {super();this.name = name;}public abstract void handleRequest(Employee e);}
/** * 部门领导 * @author tiger * */public class ApartmentManager extends Leader {public ApartmentManager(String name) {super(name);}@Overridepublic void handleRequest(Employee e) {if(e.getDays()<3){System.out.println("部门经理批准");}else{if(nextLeader != null){System.out.println(this.name+"权限不够,请求领导处理");nextLeader.handleRequest(e);}}}}
/** * 总经理 * @author tiger * */public class Manager extends Leader {public Manager(String name) {super(name);}@Overridepublic void handleRequest(Employee e) {if(e.getDays()<10){System.out.println("总经理批准");}else{System.out.println("驳回");}}}
测试类
public class Demo {public static void main(String[] args) {Employee e = new Employee("Tom",9, "无");Leader apartment = new ApartmentManager("张三");Leader manager = new Manager("李四");//建立责任链apartment.setLeader(manager);//处理请求apartment.handleRequest(e);}}
实际应用:java的异常处理机制,层层处理

servlet的过滤器

struts2的拦截器等




0 0
原创粉丝点击