我有一种方法,需要执行多个任务才能实现更大的任务。每个任务可能需要20到30行代码,因此我决定为每个任务设置一个类。
public void bigTask() {
TaskProcessor executor = new TaskProcessor();
executor.addTask(new Task1(some arguments here));
executor.addTask(new Task2(some other arguments here));
executor.addTask(new Task2(some other arguments here));
executor.run();
}
public interface Task {
public void execute();
}
public class Task1 implements Task {
@Override
public void execute() {
//Some code here
}
}
public class Task2 implements Task {
@Override
public void execute() {
//Some other code here
}
}
public class Task3 implements Task {
@Override
public void execute() {
//Some other code here
}
}
public class TaskProcessor implements Serializable {
private List<Task> tasksList;
public TaskProcessor () {
this.tasksList = new ArrayList<Task>();
}
public void addTask(Task task) {
this.tasksList.add(task);
}
public void execute() {
for (Task task : this.tasksList) {
task.execute();
}
}
}
对我来说,这段代码就像一个命令模式,但是我不确定,因为与传统的命令模式不同,每个任务的参数是不同的类型。
您认为这可以视为命令模式实现吗?
您认为这种方法适合拆分大方法吗?
谢谢
最佳答案
您认为这可以视为命令模式实现吗?
我认为这已经足够“命令模式”了。
您认为这种方法适合拆分大方法吗?
我们使用了非常相似的方法来剖析长的“序列”小“动作”。但是我们添加了不同种类的“容器”。如:在某些情况下,即使有一个条目失败,有时也会有一系列应继续执行的动作。在其他情况下,整个序列应立即停止。另一个味道是一个序列,其中每个Action也都有一个undo()
方法,以便当某个Action失败时,序列容器可以回滚所有先前(通过的)Action。
根据您的上下文,您可能会“做好事”,但我认为您至少应该考虑单个任务会失败/什么,以及TaskProcessor容器如何应对失败的步骤。