JAVA - 根据参数从抽象 class 创建对象

JAVA - create objects from abstract class depending on arguments

我 100% 肯定之前有人问过这个问题,但我不知道要问什么 google:

假设我有一个抽象的 class Ngram,它基本上只是一个列表:

abstract class Ngram {
private List<Word> words = new ArrayList<Word>();
... }

现在是否可以根据参数n创建subclass Unigram, Bigram...的对象?像这样:

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
}

我尝试 return 一个新的 Unigram,但这不起作用。我想让抽象超级 class 的构造函数来做这件事并不是最好的主意,但我不知道如何解决这个问题。感谢任何提示,谢谢

使用 Factory 模式让您根据参数创建新对象

正是这个模式,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)

public Ngram createNgram(int n){
    switch(n){
    case 1:
        return new Unigram();
    case 2:
        ...
    }
}