java学习

java学习

 

设计模式之职责链模式

职责链模式规定了一个请求,这个请求需要特定的对象去处理,当把这个请求交个一个对象,但是这个对象不负责处理这个请求,可以动态地交给其他对象处理,直到交给对的对象处理,这些对象都有处理请求的机会,只有当请求是该自己负责的时候才处理,否则交给其他对象。

下面以==============

要离职, 人事审批!

请求完毕

===========

要加薪, 项目经理审批!

========

要请假, 项目组长审批!

的规定,写一个职责链模式的例子:

这是所有请求的接口

public interface Request {

void getRequest();

}

请假的请求实现类

public class LeaveRequest implements Request{

@Override

public void getRequest() {

System.out.println("leave");

}

}

离职的请求实现类

public class DimissionRequest implements Request{

@Override

public void getRequest() {

System.out.println("dimission");

}

}

加薪的请求实现类

public class AddMoneyRequest implements Request{

@Override

public void getRequest() {

System.out.println("add money");

}

}

处理请求的接口

public interface RequestHandle {

void handleRequest(Request request);

}

Hr处理离职的请求

public class HRRequestHandle implements RequestHandle{

public void handleRequest(Request request) {

        if (request instanceof DimissionRequest) {

            System.out.println("要离职, 人事审批!");

        } 

        System.out.println("请求完毕");

    }

}

组长处理请假的请求

public class TLRequestHandle implements RequestHandle{

RequestHandle rh;

    

    public TLRequestHandle(RequestHandle rh) {

        this.rh = rh;

    }

    public void handleRequest(Request request) {

        if (request instanceof LeaveRequest) {

            System.out.println("要请假, 项目组长审批!");

        } else {

            rh.handleRequest(request);

        }

    }

}

经理处理加薪的请求

public class PMRequestHandle implements RequestHandle{

RequestHandle rh;

public PMRequestHandle(RequestHandle rh) {

    this.rh = rh;

}

public void handleRequest(Request request) {

    if (request instanceof AddMoneyRequest) {

        System.out.println("要加薪, 项目经理审批!");

    } else {

        rh.handleRequest(request);

    }

}

}

测试类

public class Test {

public static void main(String[] args) {

//先把所有的处理请求的对象组成职责链

        RequestHandle hr = new HRRequestHandle();

        RequestHandle tl = new TLRequestHandle(hr);//组长

        RequestHandle pm = new PMRequestHandle(tl);//经理

      

        Request dimissionRequest = new DimissionRequest();

        Request addMoneyRequest = new AddMoneyRequest();

        Request  leaveRequest = new LeaveRequest();

        System.out.println("==============");

        //人事处理离职请求

        

        pm.handleRequest(dimissionRequest);

        

        System.out.println("===========");

        //经理处理加薪请求

      

        pm.handleRequest(addMoneyRequest);

        

        System.out.println("========");

        //项目组长处理请假请求

       

        pm.handleRequest(leaveRequest);

    }

}



在使用时要调用最高级的职责调用者,由他去负责往下分配职责

posted on 2013-04-17 14:29 杨军威 阅读(177) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜