责任链模式(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进行投诉反馈,一经查实,立即删除!