讨论/《深入浅出设计模式》 - 责任链模式 Chain of responsibility/
《深入浅出设计模式》 - 责任链模式 Chain of responsibility
public class Bug {
    // bug 的难度值
    int value;

    public Bug(int value) {
        this.value = value;
    }
}
public abstract class Programmer {
    Programmer next;
    public void setNext(Programmer next){
        this.next = next;
    }
    abstract void handle(Bug bug);
}

public class NewProgrammer extends Programmer{

    @Override
    void handle(Bug bug) {
        if(bug.value >0 && bug.value < 20){
            solve(bug);
        }else if(next != null){
            this.next.handle(bug);
        }
    }
    private void solve(Bug bug) {
        System.out.println("菜鸟程序员解决了一个难度为 " + bug.value + " 的 bug");
    }
}
public class NormalProgrammer extends Programmer{

    @Override
    void handle(Bug bug) {
        if(bug.value >=20 && bug.value < 40){
            solve(bug);
        }else if(next != null){
            this.next.handle(bug);
        }
    }
    private void solve(Bug bug) {
        System.out.println("普通程序员解决了一个难度为 " + bug.value + " 的 bug");
    }
}

public class SuperProgrammer extends Programmer{

    @Override
    void handle(Bug bug) {
        if(bug.value >=40 && bug.value < 60){
            solve(bug);
        }else if(next != null){
            this.next.handle(bug);
        }
    }
    private void solve(Bug bug) {
        System.out.println("高级程序员解决了一个难度为 " + bug.value + " 的 bug");
    }
}
public class Client {
    public static void main(String[] args) {
        Programmer newProgramer = new NewProgrammer();
        Programmer normalProgramer = new NormalProgrammer();
        Programmer superProgramer = new SuperProgrammer();
        newProgramer.setNext(normalProgramer);
        normalProgramer.setNext(superProgramer);
        superProgramer.setNext(null);
        newProgramer.handle(new Bug(3));
        newProgramer.handle(new Bug(23));
        newProgramer.handle(new Bug(43));
    }
}

展开全部 2 讨论