您的位置:首页 > 其它

每天一设计模式之 职责链模式

2009-05-30 15:07 162 查看
每天一设计模式之 职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止.
职责链模式结构图:



样例代码来源:大话设计模式
 
小菜加薪的故事
管理者:
package com.test; 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 requestApplication(Request request);
} 经理:
package com.test; public class CommonManager extends Manager {     public CommonManager(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }     @Override
    public void requestApplication(Request request) {
        if (request.getRequestType().equals("请假") && request.getNumber() <= 2) {
            System.out.println(name + request.getRequestContent() + ",数量"
                    + request.getNumber() + "被批准");
        } else {
            if (superior != null) {
                superior.requestApplication(request);
            }
        }     } } 总监:
package com.test; public class Majordomo extends Manager {     public Majordomo(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }     @Override
    public void requestApplication(Request request) {
        if (request.getRequestType().equals("请假") && request.getNumber() <= 5) {
            System.out.println(name + request.getRequestContent() + ",数量"
                    + request.getNumber() + "被批准");
        } else {
            if (superior != null) {
                superior.requestApplication(request);
            }
        }     } } 总经理:
package com.test; public class GeneralManager extends Manager {     public GeneralManager(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }     @Override
    public void requestApplication(Request request) {
        if (request.getRequestType().equals("请假")) {
            System.out.println(name + request.getRequestContent() + ",数量"
                    + request.getNumber() + "被批准");
        } else if (request.getRequestType().equals("加薪")
                && request.getNumber() <= 500) {
            System.out.println(name + request.getRequestContent() + ",数量"
                    + request.getNumber() + "被批准");         }     } } 测试代码:
package com.test; public class Test {     /**
     * @param args
     */
    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.requestApplication(request);         Request request2 = new Request();
        request.setRequestType("请假");
        request.setRequestContent("小菜请假");
        request.setNumber(4);
        jinli.requestApplication(request);         Request request3 = new Request();
        request.setRequestType("加薪");
        request.setRequestContent("小菜请求加薪");
        request.setNumber(400);
        jinli.requestApplication(request);     } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: