我想在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);
}
}
}
}
顯然,這是行不通的,因爲超()需要被調用之前,我可以初始化參數。
這類問題看起來像必須有一些簡單的設計模式來解決它。我想不出正確的方法來解決它。
這正是我想要的解決方案。在給了它更多的思考之後,我實際上意識到我正在過度構建這個問題。層次結構實際上並不需要那麼靈活:我實際上只會在子類構造函數中發生初始化,並且如果稍後再創建更多的子類,就需要記住這樣做。 – Chill