Java 是否有设计模式强制初始化子类实现的方法?
我试图在Java中创建一个抽象类,其创建的一部分涉及调用子类需要实现的初始化方法。但是,我希望子类能够访问抽象类不需要知道的任意参数 下面是一些代码,让您更清楚地了解:Java 是否有设计模式强制初始化子类实现的方法?,java,design-patterns,Java,Design Patterns,我试图在Java中创建一个抽象类,其创建的一部分涉及调用子类需要实现的初始化方法。但是,我希望子类能够访问抽象类不需要知道的任意参数 下面是一些代码,让您更清楚地了解: public abstract class NormalizedRandom<T> { private Queue<T> randomList; private List<T> usedRandomsList; public NormalizedRandom() {
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();
...
}
公共抽象类NormalizedRandom{
专用队列随机列表;
私有列表usedRandomsList;
公共规范化随机数(){
randomList=新的LinkedList();
usedRandomsList=newarraylist();
init();
shufflist();
}
受保护的抽象void init();
...
}
及
公共类normalizedRandomintegrange扩展NormalizedRandom{
私用int min;
私人int max;
私有int重复;
公共normalizedrandomintegrange(int-min、int-max、int-repeats){
this.min=min;
this.max=max;
this.repeats=重复;
}
@凌驾
受保护的void init(){
对于(int num=min;num我认为您可以使用“构建器”,这是一种用于避免使用许多不同构造函数的创造性模式。
我的意思是从构造函数中获得对象的初始化。为此,请使用生成器类。尝试将初始化展开到自己的类或接口中,这样做
子类必须提供超类作为构造函数的参数。
现在您可以轻松地切换并重新定义init方法和
在子类代码运行之前,超类可以自己调用它。
initStrategy可以用参数初始化,这些参数从
超类。我会使用一个接口。
(我想你已经知道了,但这是一种战略模式)
希望这能有所帮助,Steve。这正是我想要的解决方案。在仔细考虑之后,我意识到我在设计这个问题。层次结构实际上不需要那么灵活:我实际上只需要在子类构造函数中进行初始化,只需要重新定义呃,如果我以后再创建更多的子类,我就可以这样做。生成器的工作没有我希望的那么好,因为它为问题增加了一个额外的间接层。我希望子类能够直接定义其初始化,这是Jacksonf1建议的策略模式能够做到的。
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);
}
}
}
}