gpt4 book ai didi

java - 是否有设计模式来强制初始化子类实现的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:22 25 4
gpt4 key购买 nike

我正在尝试在 Java 中创建一个抽象类,其中它的创建部分涉及调用子类需要实现的初始化方法。我希望子类能够访问任意参数,但是抽象类不需要知道这些参数。

这里有一些代码可以让它更清楚:

public abstract class NormalizedRandom<T> {

private Queue<T> randomList;
private List<T> usedRandomsList;

public NormalizedRandom() {
randomList = new LinkedList<T>();
usedRandomsList = new ArrayList<T>();
init();
shuffleList();
}

protected abstract void init();

...

}

还有

public class NormalizedRandomIntegerRange extends NormalizedRandom<Integer> {

private int min;
private int max;
private int repeats;

public NormalizedRandomIntegerRange(int min, int max, int repeats) {
this.min = min;
this.max = max;
this.repeats = repeats;
}

@Override
protected void init() {
for(int num = min; num <= max; num++) {
for(int i = 0; i < repeats; i++) {
super.addRandomOutcome(num);
}
}
}
}

显然这行不通,因为在初始化参数之前需要调用 super()。

这类问题看起来必须有一些简单的设计模式来解决。我只是暂时想不出正确的方法来解决它。

最佳答案

尝试将初始化推出到自己的类或接口(interface)中,子类必须提供父类(super class)作为构造函数的参数。现在您可以轻松切换和重新定义 init 方法和父类(super class)可以在子类代码运行之前调用它本身。initStrategy 可以使用参数进行初始化,这些参数无法从父类(super class)。我会使用一个界面。(我想你已经知道了,但它是一种策略模式)。

希望这有帮助,史蒂夫。

关于java - 是否有设计模式来强制初始化子类实现的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312679/

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