职责链模式

来源:互联网 发布:网络理财被骗怎么办 编辑:程序博客网 时间:2024/04/29 16:07

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象练成一个链,并沿着这个链传递该请求,直到有一个对象处理它为止。

抽象实例

Handler.java

package zx.chainofresponsibility.test1;/** * 处理器类  * @author Carl_Hugo */public abstract class Handler {    protected Handler successor;    //设置继任者    public void setSuccessor(Handler successor){        this.successor=successor;    }    //处理请求    public abstract void HandlerRequest(int request);}class ConcreteHandler1 extends Handler{    @Override    public void HandlerRequest(int request) {        if(request>=0&&request<10){            System.out.println(this.getClass().getSimpleName()+"处理请求"+request);        //当无法处理时就判断是否存在继任者,存在就让继任者处理请求        }else if(successor!=null){            successor.HandlerRequest(request);        }    }}class ConcreteHandler2 extends Handler{    @Override    public void HandlerRequest(int request) {        if(request>=10&&request<20){            System.out.println(this.getClass().getSimpleName()+"处理请求"+request);        }else if(successor!=null){            successor.HandlerRequest(request);        }    }}class ConcreteHandler3 extends Handler{    @Override    public void HandlerRequest(int request) {        if(request>=20&&request<30){            System.out.println(this.getClass().getSimpleName()+"处理请求"+request);        }else if(successor!=null){            successor.HandlerRequest(request);        }    }}

Test.java

package zx.chainofresponsibility.test1;public class Test {    public static void main(String[] args) {        ConcreteHandler1 h1 = new ConcreteHandler1();        ConcreteHandler2 h2 = new ConcreteHandler2();        ConcreteHandler3 h3 = new ConcreteHandler3();        h1.setSuccessor(h2);        h2.setSuccessor(h3);        int[] request={2,5,14,22,18,3,27,20};        for(int i:request){            h1.HandlerRequest(i);        }    }}

具体实例

Request.java

public class Request {    //申请类型    private String requestType;    //申请内容    private String requestContent;    //数量    private int number;    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 getNumber() {        return number;    }    public void setNumber(int number) {        this.number = number;    }}

Manager.java

public abstract class Manager {    protected String name;    //上级    protected Manager superier;    public Manager(String name){        this.name=name;    }    //设置管理者的上级    public void setSuperior(Manager superier){        this.superier=superier;    }    //申请请求    public abstract void requestApplications(Request request);}class CommonManager extends Manager{    public CommonManager(String name) {        super(name);    }    @Override    public void requestApplications(Request request) {        if("请假".equals(request.getRequestType())&&request.getNumber()<=2){            System.out.println(name+":"+request.getRequestType()+"" +                    " 数量"+request.getNumber()+" 被批准");        }else if(superier!=null){            superier.requestApplications(request);        }    }}class Majordomo extends Manager{    public Majordomo(String name) {        super(name);    }    @Override    public void requestApplications(Request request) {        if("请假".equals(request.getRequestType())&&request.getNumber()<=5){            System.out.println(name+":"+request.getRequestType()+"" +                    " 数量"+request.getNumber()+" 被批准");        }else if(superier!=null){            superier.requestApplications(request);        }    }}class GeneralManager extends Manager{    public GeneralManager(String name) {        super(name);    }    @Override    public void requestApplications(Request request) {        if("请假".equals(request.getRequestType())){            System.out.println(name+":"+request.getRequestType()+"" +                    " 数量"+request.getNumber()+" 被批准");        }else if("加薪".equals(request.getRequestType())&&request.getNumber()<=500){            System.out.println(name+":"+request.getRequestType()+"" +                    " 数量"+request.getNumber()+" 被批准");        }else if("加薪".equals(request.getRequestType())&&request.getNumber()>500){            System.out.println(name+":"+request.getRequestType()+"" +                    " 数量"+request.getNumber()+" 再说吧!");        }    }}

Test.java

public class Test {    public static void main(String[] args) {        CommonManager commonManager = new CommonManager("经理");        Majordomo manjordomo = new Majordomo("总监");        GeneralManager generalManager = new GeneralManager("总经理");        commonManager.setSuperior(manjordomo);        manjordomo.setSuperior(generalManager);        Request request = new Request();        request.setRequestType("请假");        request.setRequestContent("小菜请假");        request.setNumber(1);        commonManager.requestApplications(request);        Request request2 = new Request();        request2.setRequestType("请假");        request2.setRequestContent("小明请假");        request2.setNumber(4);        commonManager.requestApplications(request2);        Request request3 = new Request();        request3.setRequestType("加薪");        request3.setRequestContent("小菜请求加薪");        request3.setNumber(500);        commonManager.requestApplications(request3);        Request request4 = new Request();        request4.setRequestType("加薪");        request4.setRequestContent("小菜请求加薪");        request4.setNumber(1000);        commonManager.requestApplications(request4);    }}

输出

0 0
原创粉丝点击