本文介绍: 由于第一个包裹是”fragile“,所以它会被分拣员处理,并且请求会按照责任链的顺序传递给下一个处理者,最终由签收员处理。在客户端代码中,创建一个责任链,将请求传递给责任链的第一个处理者。责任链中的每个处理者都有一个指向一个处理者的引用,当处理完成任务后,它可以选择请求传递给下一个处理者。责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递每个处理者决定是否处理请求以及是否请求传递给下一个处理者。

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递每个处理者决定是否处理请求以及是否将请求传递给下一个处理者。在快递系统中,责任链模式可以用于处理物流中的不同环节,例如包裹的分拣、配送等。

以下是一个简化的Java示例模拟一个快递系统中的责任链模式。假设有三个处理者:分拣员、配送员和签收员。每个处理者负责处理特定的任务,并且请求会按照责任链的顺序依次经过它们。

java
Copy code
// 请求类
class Package {
    private String description;

    public Package(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

// 处理者接口
interface Handler {
    void handleRequest(Package pkg);
}

// 具体处理者1 - 分拣员
class SortingHandler implements Handler {
    private Handler nextHandler;

    public SortingHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(Package pkg) {
        if (pkg.getDescription().contains("fragile")) {
            System.out.println("Sorting Handler: Handling a fragile package.");
            // 分拣员处理完成后,将请求传递给下一个处理者
            nextHandler.handleRequest(pkg);
        } else {
            System.out.println("Sorting Handler: Package is not fragile. Skipping sorting.");
        }
    }
}

// 具体处理者2 - 配送class DeliveryHandler implements Handler {
    private Handler nextHandler;

    public DeliveryHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(Package pkg) {
        System.out.println("Delivery Handler: Delivering the package.");
        // 配送员处理完成后,将请求传递给下一个处理者
        nextHandler.handleRequest(pkg);
    }
}

// 具体处理者3 - 签收员
class SignHandler implements Handler {
    @Override
    public void handleRequest(Package pkg) {
        System.out.println("Sign Handler: Package signed and delivered successfully.");
    }
}

// 客户端代码
public class DeliverySystem {
    public static void main(String[] args) {
        // 构建责任链
        Handler signHandler = new SignHandler();
        Handler deliveryHandler = new DeliveryHandler(signHandler);
        Handler sortingHandler = new SortingHandler(deliveryHandler);

        // 模拟一个包裹
        Package pkg = new Package("Fragile item");

        // 将请求传递给责任链的第一个处理者
        sortingHandler.handleRequest(pkg);
    }
}

这个示例中,分拣员、配送员和签收员分别实现了Handler接口每个处理者负责处理特定类型的请求。在客户端代码中,创建了一个责任链,将请求传递给责任链的第一个处理者。责任链中的每个处理者都有一个指向下一个处理者的引用,当处理者完成任务后,它可以选择将请求传递给下一个处理者。这种方式使得责任链模式非常灵活,易于扩展维护

2 / 2

User
那要怎么调用呢,给我一个完整案例
ChatGPT
上述的责任链模式的示例中,我们已经创建了一个简单的快递系统场景,其中包含分拣员、配送员和签收员三个处理者。现在,我将提供一个完整案例演示如何调用责任链来处理快递包裹

java
Copy code
// 请求类
class Package {
    private String description;

    public Package(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

// 处理者接口
interface Handler {
    void handleRequest(Package pkg);
}

// 具体处理者1 - 分拣员
class SortingHandler implements Handler {
    private Handler nextHandler;

    public SortingHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(Package pkg) {
        if (pkg.getDescription().contains("fragile")) {
            System.out.println("Sorting Handler: Handling a fragile package.");
            // 分拣员处理完成后,将请求传递给下一个处理者
            nextHandler.handleRequest(pkg);
        } else {
            System.out.println("Sorting Handler: Package is not fragile. Skipping sorting.");
        }
    }
}

// 具体处理者2 - 配送员
class DeliveryHandler implements Handler {
    private Handler nextHandler;

    public DeliveryHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    @Override
    public void handleRequest(Package pkg) {
        System.out.println("Delivery Handler: Delivering the package.");
        // 配送员处理完成后,将请求传递给下一个处理者
        nextHandler.handleRequest(pkg);
    }
}

// 具体处理者3 - 签收员
class SignHandler implements Handler {
    @Override
    public void handleRequest(Package pkg) {
        System.out.println("Sign Handler: Package signed and delivered successfully.");
    }
}

// 客户代码
public class DeliverySystem {
    public static void main(String[] args) {
        // 构建责任链
        Handler signHandler = new SignHandler();
        Handler deliveryHandler = new DeliveryHandler(signHandler);
        Handler sortingHandler = new SortingHandler(deliveryHandler);

        // 模拟多个包裹
        Package fragilePackage = new Package("Fragile item");
        Package normalPackage = new Package("Non-fragile item");

        // 将请求传递给责任链的第一个处理者
        sortingHandler.handleRequest(fragilePackage);
        System.out.println("--------------");
        sortingHandler.handleRequest(normalPackage);
    }
}

这个案例中,我们创建了两个包裹对象,一个标记为”fragile”,另一个标记为”non-fragile”。然后我们将这两个包裹对象分别传递给责任链的第一个处理者,即分拣员(SortingHandler)。由于第一个包裹是”fragile”,所以它会被分拣员处理,并且请求会按照责任链的顺序传递给下一个处理者,最终由签收员处理。对于第二个包裹,由于它不是”fragile”,所以分拣员会跳过处理,直接打印“Package is not fragile. Skipping sorting.”。整个过程演示了责任链模式中请求如何在处理者之间传递的机制

原文地址:https://blog.csdn.net/mywaya2333/article/details/134747423

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_46742.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注