帮我用JAVA写一段责任链模式的代码,要求输入输出泛型都是继承了MyTask这个接口的任务,有三个任务,如果有一个任务没通过,回到开头
时间: 2024-10-13 16:10:01 浏览: 22
Java 泛型最全指南(定义和使用+继承泛型类/实现泛型接口+泛型的边界+通配符+类型擦除)
责任链模式(Chain of Responsibility Pattern)是一种处理请求分发的策略设计模式,它将请求的接收者链接成一条链,并沿着这条链传递请求,直到找到第一个能处理该请求的对象。以下是使用Java编写的基于泛型的责任链模式示例:
```java
import java.util.ArrayList;
import java.util.List;
// 定义接口 MyTask,所有任务都需实现此接口
interface MyTask<T> {
void execute(T data) throws Exception;
}
// 环境类,负责维护链表并处理请求
class Handler<T> {
private List<MyTask<T>> chain; // 责任链
public Handler() {
this.chain = new ArrayList<>();
}
// 添加任务到链中
public void addTask(MyTask<T> task) {
chain.add(task);
}
// 责任链处理请求
public void handleRequest(T data) throws Exception {
for (MyTask<T> task : chain) {
try {
task.execute(data);
} catch (Exception e) {
System.out.println("任务 " + task + " 处理失败,转交给下一个");
return; // 如果当前任务处理失败,则返回继续处理下个任务
}
}
System.out.println("所有任务都已成功处理完毕");
}
}
// 具体任务,这里是三个例子
class Task1 implements MyTask<String> {
@Override
public void execute(String data) throws Exception {
if (data.startsWith("A")) {
System.out.println("Task 1: 成功处理:" + data);
} else {
throw new Exception("Task 1: 数据不符合");
}
}
}
class Task2 implements MyTask<String> {
@Override
public void execute(String data) throws Exception {
if (data.startsWith("B")) {
System.out.println("Task 2: 成功处理:" + data);
} else {
throw new Exception("Task 2: 数据不符合");
}
}
}
class Task3 implements MyTask<String> {
@Override
public void execute(String data) throws Exception {
if (data.startsWith("C")) {
System.out.println("Task 3: 成功处理:" + data);
} else {
throw new Exception("Task 3: 数据不符合");
}
}
}
public class Main {
public static void main(String[] args) {
Handler<String> handler = new Handler<>();
handler.addTask(new Task1());
handler.addTask(new Task2());
handler.addTask(new Task3());
try {
handler.handleRequest("ABCD"); // 输入数据,可能会触发异常
} catch (Exception e) {
System.out.println("请求处理结束");
}
}
}
```
阅读全文