【设计模式】——职责链模式(21)

一、定义

职责链模式使多个对象都有机会处理,从而避免请求的发送者和接受者之间的耦合关系。将这个对象形成一条链,直到有一个对象处理他为止。

二、框架运用

过滤器就是运用的职责链的设计思路

三、实战

1、抽象父类

public abstract class Manager {

    private String name;

    protected Manager superManager;

    public Manager(String name) {
        this.name = name;
    }

    public void setSuper(Manager superManager) {
        this.superManager = superManager;
    }


    abstract void handler(Integer integer);
}

2、实现类

public class FirstManager extends Manager {
    public FirstManager(String name) {
        super(name);
    }

    @Override
    void handler(Integer integer) {
        System.out.println("我是一把手,处理所有的事情");
    }
}


public class SecondManager extends Manager {
    public SecondManager(String name) {
        super(name);
    }

    @Override
    void handler(Integer integer) {
        if (2==integer){
            System.out.println("我是二把手只处理integer=2的事情");
        }else {
            if (null!=superManager){
                superManager.handler(integer);
            }
        }

    }
}


public class ThirdManager extends Manager {

    public ThirdManager(String name) {
        super(name);
    }

    @Override
    void handler(Integer integer) {
        if (3==integer){
            System.out.println("我是三把手只处理integer=3的事情");
        }else {
            if (null!=superManager){
                superManager.handler(integer);
            }
        }

    }
}

3、运行类和结果

public class Client {
    public static void main(String[] args) {
        Manager first = new FirstManager("一把手");
        Manager second = new SecondManager("二把手");
        Manager third = new ThirdManager("三把手");

        second.setSuper(first);
        third.setSuper(second);

        System.out.println("----------------------");
        second.handler(2);
        System.out.println("----------------------");
        second.handler(1);
        System.out.println("----------------------");
        third.handler(3);
        System.out.println("----------------------");
        third.handler(2);
        System.out.println("----------------------");
        third.handler(1);
        System.out.println("----------------------");

    }
}



Connected to the target VM, address: '127.0.0.1:57004', transport: 'socket'
----------------------
我是二把手只处理integer=2的事情
----------------------
我是一把手,处理所有的事情
----------------------
我是三把手只处理integer=3的事情
----------------------
我是二把手只处理integer=2的事情
----------------------
我是一把手,处理所有的事情
----------------------
Disconnected from the target VM, address: '127.0.0.1:57004', transport: 'socket'
发布了170 篇原创文章 · 获赞 64 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/hy_coming/article/details/103634718