美文网首页
设计模式(2)-责任链模式

设计模式(2)-责任链模式

作者: zhglance | 来源:发表于2019-06-18 15:54 被阅读0次

责任链模式使多个对象都有机会处理请求,实现了发送者和接受者之间的耦合,将这些接受者连成一条链,使处理请求沿着这条链,直到有一个对象处理请求为止。常用的场景有servlet中的filter,针对if-else和switch-case进行优化。

一、需求举例:

项目中需求开发应用场景:
1.如果初级工程师能够完成,就让初级工程师完成,否则交给中级工程师;
2.如果中级工程师能够完成,就让中级工程师完成,否则交给高级工程师;
3.如果高级工程师能够完成,就让高级工程师完成,否则交给Top工程师拒绝需求;

二、对象关系

三、代码实战

工程师父类:AbstractEngineer.java

package com.lance.chainpattern;

public abstract class AbstractEngineer {

    public static final int EASY = 1;
    public static final int MIDDLE = 2;
    public static final int DIFFICULT = 3;


    protected int difficulty;

    protected AbstractEngineer nextEngineer;

    public void setNextEngineer(AbstractEngineer abstractEngineer) {
        this.nextEngineer = abstractEngineer;
    }


    public void develop(int difficulty, String program) {

        if (this.difficulty >= difficulty) {
            finish(program);
            return;
        }

        if (this.nextEngineer != null) {
            nextEngineer.develop(difficulty, program);
        }

    }


    abstract protected void finish(String program);

}
初级工程师:JuniorEngineer.java

package com.lance.chainpattern;

public class JuniorEngineer extends AbstractEngineer {

public JuniorEngineer(int difficulty) {
    this.difficulty = difficulty;
}

@Override
protected void finish(String program) {
    System.out.println("Junior Engineer finish " + program);
}

}


中级工程师:IntermediateEngineer.java

package com.lance.chainpattern;

public class IntermediateEngineer extends AbstractEngineer {


    public IntermediateEngineer(int difficulty) {
        this.difficulty = difficulty;
    }

    @Override
    protected void finish(String program) {
        System.out.println("Intermediate Engineer finish " + program);
    }
}

高级工程师:SeniorEngineer.java

package com.lance.chainpattern;

public class SeniorEngineer extends AbstractEngineer {

    public SeniorEngineer(int difficulty) {
        this.difficulty = difficulty;
    }

    @Override
    protected void finish(String program) {

            System.out.println("Senior Engineer finish " + program);


    }
}

Top工程师:TopEngineer.java

package com.lance.chainpattern;

public class TopEngineer  extends AbstractEngineer {

    public TopEngineer(int difficulty) {
        this.difficulty = difficulty;
    }

    @Override
    protected void finish(String program) {
        System.out.println("Top Engineer refuse " + program);
    }
}

主类:ChainPattern.java

package com.lance.chainpattern;

public class ChainPattern {


    public static void main(String[] args) {

        // 创建对象
        AbstractEngineer engineerChain = new JuniorEngineer(AbstractEngineer.EASY);
        AbstractEngineer intermediateEngineer = new IntermediateEngineer(AbstractEngineer.MIDDLE);
        AbstractEngineer seniorEngineer = new SeniorEngineer(AbstractEngineer.DIFFICULT);

        //构建责任链
        seniorEngineer.setNextEngineer(new TopEngineer(Integer.MAX_VALUE));
        intermediateEngineer.setNextEngineer(seniorEngineer);
        engineerChain.setNextEngineer(intermediateEngineer);

        System.out.println("==========start==========");
        engineerChain.develop(AbstractEngineer.EASY,"easy program");
        System.out.println("=========================");
        engineerChain.develop(AbstractEngineer.MIDDLE,"middle program");
        System.out.println("=========================");

        engineerChain.develop(AbstractEngineer.DIFFICULT,"difficult program");
        System.out.println("=========================");
        engineerChain.develop(4,"too difficult program");

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

    }

}

输出结果:

==========start==========
Junior Engineer finish easy program
=========================
Intermediate Engineer finish middle program
=========================
Senior Engineer finish difficult program
=========================
Top Engineer refuse too difficult program
==========end==========

相关文章

网友评论

      本文标题:设计模式(2)-责任链模式

      本文链接:https://www.haomeiwen.com/subject/uwwzfctx.html