责任链模式的学习与使用

1、责任链模式的学习

  责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许你将请求沿着处理链进行传递,直到有一个处理者能够处理该请求。责任链模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
责任链模式的学习与使用_第1张图片
责任链模式的工作方式如下:

  1. 客户端创建一个处理链,并将请求发送给链的第一个处理者。
  2. 每个处理者在接收到请求后,首先判断自己是否能够处理该请求。如果能够处理,则进行处理并结束;如果不能处理,则将请求传递给下一个处理者。
  3. 这个过程会一直持续下去,直到有一个处理者处理请求或者请求到达链的末尾。

2、责任链模式的使用

  假设你正在开发一个在线购物系统,需要实现库存检查的功能。系统中有三个库存检查器,分别是仓库库存检查器、店铺库存检查器和供应商库存检查器。当用户下单购买商品时,需要按照一定的顺序进行库存检查,确保商品库存充足。
库存检查抽象类

public abstract class InventoryCheck {


    protected InventoryCheck next;

    public InventoryCheck(InventoryCheck inventoryCheck) {
        this.next = inventoryCheck;
    }

    /**
     * 库存检查
     */
    protected abstract void check();
}

店铺库存检查(具体的处理者)

public class ShopInventoryCheck extends InventoryCheck {
    public ShopInventoryCheck(InventoryCheck inventoryCheck) {
        super(inventoryCheck);
    }

    @Override
    protected void check() {
        System.out.println("开始店铺库存检查");
        if (false) {
            System.out.println("店铺库存满足");
            return;
        }
        System.out.println("店铺库存不满足");
        if (Objects.nonNull(next)) {
            next.check();
        }
    }
}

供应商库存检查(具体的处理者)

public class SupplierInventoryCheck extends InventoryCheck {

    public SupplierInventoryCheck(InventoryCheck inventoryCheck) {
        super(inventoryCheck);
    }

    @Override
    protected void check() {
        System.out.println("开始供应商库存检查");
        if (false) {
            System.out.println("供应商库存满足");
            return;
        }
        System.out.println("供应商库存不满足");
        if (Objects.nonNull(next)) {
            next.check();
        }
    }
}

仓库库存检查(具体的处理者)

public class WareHouseInventoryCheck extends InventoryCheck {

    public WareHouseInventoryCheck(InventoryCheck inventoryCheck) {
        super(inventoryCheck);
    }

    @Override
    protected void check() {
        System.out.println("开始进行仓库库存检查");
        if (false) {
            System.out.println("仓库库存满足");
            return;
        }
        System.out.println("仓库库存不满足");
        if (Objects.nonNull(next)) {
            next.check();
        }
    }
}

责任链模式客户端

public class ChainClient {

    public static void main(String[] args) {

        InventoryCheck shopInventoryCheck = new ShopInventoryCheck(null);

        InventoryCheck supplierInventoryCheck = new SupplierInventoryCheck(shopInventoryCheck);

        InventoryCheck wareHouseInventoryCheck = new WareHouseInventoryCheck(supplierInventoryCheck);

        wareHouseInventoryCheck.check();
    }
}
开始进行仓库库存检查
仓库库存不满足
开始供应商库存检查
供应商库存不满足
开始店铺库存检查
店铺库存不满足

3、总结

责任链模式的优点包括:

  1. 将请求的发送者和接收者解耦,让请求的发送者不需要知道具体的接收者是谁。
  2. 可以动态地组织和扩展处理链。
  3. 提供了灵活性,可以根据需要调整处理流程。

责任链模式适用的场景包括:

  1. 有多个对象可以处理同一请求,但具体处理者在运行时才能确定。
  2. 请求发送者不需要知道哪个对象将处理请求以及请求的处理过程。

你可能感兴趣的:(设计模式,责任链模式,学习,java)