Java - 责任链模式

-- 责任链模式Chain of Responsibility(COR) ,该模式构造一系列分别担当不同的职责的类(单一职责)来共同完成一个任务,这些类的对象之间像链条一样紧密相连。

一、优缺点:

优点:

  • 分工职责明确。
  • 类与类之间的耦合度低

缺点:

  • 因为处理时以链的形式在对象间传递消息,因此根据实现方式不同,可能影响处理的速度

二、模式结构

引用官方结构图:

组成(角色) 作用
Handler(抽象处理者) 提供抽象方法,含有对自身的引用
ConcreteHandler (具体处理者) 具体处理者,实现抽象方法
Client(客户端) 客户端调用

三、栗子 《汽车零件组装》-汽车框架-汽车底部-汽车轮胎

1、Handler 处理抽象类 - CarParts汽车零件 (对自身的引用)

package com.behavior.cor;

/** 
  * @Description: 抽象处理者
  * @Author: ziHeng
  * @Date: 2018/8/12 5:53 PM
  */ 
public abstract class CarParts{

    //对自身的引用
    protected CarParts carParts;
    
    public void setNextHandle(CarParts carParts){
        this.CarParts = carParts;
    }

    public abstract void nextHandle();
}

2、ConcreteHandler 具体处理者

(1)、汽车框架

package com.behavior.cor;

/**
 * @description: 汽车框架
 * @author: ziHeng
 * @create: 2018-08-12 15:00
 **/
public class Framework extends CarParts {

    @Override
    public void nextHandle() {
        System.out.println("拼装框架");
        if(carParts!=null){
            carParts.nextHandle();
        }
    }
}

(2)、汽车底部

package com.behavior.cor;

/**
 * @description: 汽车底部
 * @author: ziHeng
 * @create: 2018-08-12 15:00
 **/
public class Bottom extends CarParts{

    @Override
    public void nextHandle() {
        System.out.println("拼装底部");
        if(carParts!=null){
            carParts.nextHandle();
        }
    }
}

(3)、汽车轮胎

package com.behavior.cor;

/**
 * @description: 汽车轮胎
 * @author: ziHeng
 * @create: 2018-08-12 15:00
 **/
public class Tire extends CarParts{

    @Override
    public void nextHandle() {
        System.out.println("拼装轮胎");
        if(carParts!=null){
            carParts.nextHandle();
        }
    }

}

调用Test类:

package com.behavior.cor;

/**
 * @description: 责任链模式
 * @author: ziHeng
 * @create: 2018-08-12 14:50
 **/
public class corTest {

    public static void main(String[] args) {

        //汽车外框
        CarParts framework = new Framework();
        //汽车底部
        CarParts bottom = new Bottom();
        //轮胎
        CarParts tire = new Tire();

        //设置
        framework.setNextHandle(bottom);
        bottom.setNextHandle(tire);

        framework.nextHandle();
    }

}

学到这里:博主突然思考这个模式与控制反转(IOC)有什么关联。

依赖倒置(DIP)、依赖注入(DI)、控制反转(IoC)

Ioc 传送门: https://www.zhihu.com/question/23277575

控制反转(IOC)的思想最核心的地方在于:资源不由使用资源的双方管理,而由不使用资源的第三方管理

这可以带来很多好处,例如:

  • 资源集中管理,实现资源的可配置和易管理。
  • 降低了使用资源双方的依赖程度,也就是我们说的耦合度。

个人观点(小白观点):

1、模式用到了依赖倒置原则(DIP),A:高低层的模块(客户端调用拼装顺序决定了高低层)和B:具体实现(汽车零件的具体实现)都依赖于抽象。

      依赖倒置原则:

      A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。

      B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

2、也用到了依赖注入(DI),栗子里通过注入汽车零件对象,从而决定下一步的组装的对象。

3、至于控制反转(IOC),博主修炼不足,无法看出依赖注入(DI)控制反转(IOC)之间的区别。

控制反转(IOC)与依赖注入(DI)区别 传送门:  https://blog.csdn.net/guojin08/article/details/74295296

猜你喜欢

转载自blog.csdn.net/weixin_39569611/article/details/81608373