gpt4 book ai didi

java - 使用 templatemethod 模式实现工作链?

转载 作者:行者123 更新时间:2023-12-02 07:56:07 25 4
gpt4 key购买 nike

我有一个worker类的层次结构,所有这些类都对工件进行某种处理。这个想法是,每个工作人员都会进行一些预处理,将工件推送到子类,然后进行一些后处理:

public void process(Workpiece wp) {
doPreprocessing(wp);
sub.process(wp); // this obviously doesn't work
doPostProcessing(wp);
}

现在我正在通过声明新的抽象方法来解决这个问题:

public final void process(Workpiece wp) {
doPreprocessing(wp);
subProcess(wp); // this obviously doesn't work
doPostProcessing(wp);
}

protected abstract void subProcess(Workpiece wp);

它有一个明显的缺点,即对于每个层次结构级别,都有一个附加的新方法。

我想保证,即使使用新的、用户实现的工作程序,所有预处理和后处理方法也会执行,这些工作程序不受我的控制。

你会怎么做?

最佳答案

按照模板方法模式,您可以通过设计类来实现此目的,以便在子类中重写 doPreProcessingdoPostProcessing 方法。我猜你不想这样做,因为你不能确定子类会调用 super,因此你不能“保证所有预处理和后处理方法即使使用新的用户也能执行” -实现 worker 。”

您可以尝试将工作对象链接在一起的设计,而不是使用继承,如下所示:

public abstract class Worker {
private Worker next;

protected Worker(Worker next) {
this.next = next;
}

public void process(Workpiece wp) {
preProcess(wp);

if (next != null)
next.process(wp);

postProcess(wp);
}

public abstract void preProcess(Workpiece wp);
public abstract void postProcess(Workpiece wp);
}

您的类和用户实现的类,不是扩展“下一个”工作器,而是在其构造函数中创建“下一个”工作器:

public class MyWorker extends Worker {

public MyWorker() {
super(new MyOtherWorker());
}

public abstract void preProcess(Workpiece wp) {
// code
}

public abstract void postProcess(Workpiece wp) {
// code
}
}

关于java - 使用 templatemethod 模式实现工作链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com