设计模式笔记_19_职责链模式

在这里插入图片描述

package com.maom.design.D_19_ChainOfResponsibility;

/**
 * @Title: D_19_ChainOfResponsibility
 * @Description: 19_职责链模式
 * @Author maohb
 * @Version 1.0
 */
public class D_19_ChainOfResponsibility {

    public static void main(String[] args) {
        CarHandler headH = new CarHeadHandler();
        CarHandler bodyH = new CarBodyHandler();
        CarHandler tailH = new CarTailHandler();

        // 组装顺序预先设定好,顺序是车头-->车身-->车尾
        headH.setNextHandler(bodyH);
        bodyH.setNextHandler(tailH);
        // 调用职责链的链头来完成操作
        headH.HandlerCar();
        System.out.println("---------------");

        // 顺序改变,希望是车身-->车头-->车尾
        bodyH.setNextHandler(headH);
        headH.setNextHandler(tailH);
        bodyH.HandlerCar();
        System.out.println("---------------");

        // 简便操作
        bodyH.setNextHandler(headH).setNextHandler(tailH);
        bodyH.HandlerCar();
    }

}

/** 职责链抽象类 */
abstract class CarHandler {
    // 下一个职责
    protected CarHandler carHandler;
    // 设置下一个职责处理类
    public CarHandler setNextHandler(CarHandler carHandler) {
        this.carHandler = carHandler;
        return this.carHandler;
    }
    // 抽象当前职责处理方法
    public abstract void HandlerCar();
}

class CarHeadHandler extends CarHandler{
    public void HandlerCar() {
        System.out.println("组装车头");
        // 调用下一步
        if(this.carHandler != null) {
            this.carHandler.HandlerCar();
        }
    }
}

class CarBodyHandler extends CarHandler {
    public void HandlerCar() {
        System.out.println("组装车身");
        if(this.carHandler != null) {
            this.carHandler.HandlerCar();
        }
    }
}

class CarTailHandler extends CarHandler{
    public void HandlerCar() {
        System.out.println("组装车尾");
        if(this.carHandler != null) {
            this.carHandler.HandlerCar();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值