我100%肯定以前曾经问过,但我不知道该怎么去谷歌:
假设我有一个抽象类Ngram,它基本上只是一个List:
abstract class Ngram {
private List<Word> words = new ArrayList<Word>();
... }
现在可以创建一个子类Unigram,Bigram的对象......取决于参数n?像这样:
int n;
for(Word w : Sentence.getWordList()) {
Ngram ngram = new Ngram(n);
... }
所以Ngram的构造函数看起来像这样:
Ngram(int n) {
if(n==1) : //create Object of Type Unigram, let ngram refer to this object
}
我试图返回一个新的Unigram,但这不起作用。我想让抽象超类的构造函数做到这一点并不是最好的想法,但我不知道如何解决这个问题。感谢任何提示,谢谢
答案 0 :(得分:3)
确切地说有一种模式,Factory
。
class Ngram { }
class Ugram extends Ngram { }
class Bigram extends Ngram { }
public class NgramFactory {
public static Ngram createNgram(int n) {
if (n ==1) {
return new Ugram();
} else {
return new Bigram();
}
}
}
用法:NgramFactory.createNgram(x)
答案 1 :(得分:1)
public Ngram createNgram(int n){
switch(n){
case 1:
return new Unigram();
case 2:
...
}
}
答案 2 :(得分:0)
使用Factory
- 模式可让您根据参数