2015-02-05 96 views
2

我肯定100%,這已經被問過,但我不知道google一下:JAVA - 創建抽象類的對象取決於參數

假設我有一個抽象類NGRAM這基本上只是一個列表:

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 
} 

我試圖返回一個新的單字,但不起作用。我想這不是讓抽象超類的構造函數這樣做的最大想法,但我不知道如何解決這個問題。是值得讚賞的任何提示,謝謝

回答

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)

+0

謝謝,這實際上使有很大的意義。 – 2015-02-05 16:12:54

0

使用Factory -pattern讓你創建基於您的參數

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

嗯,這實際上是一個非常好的方法來避免所有的if(n == ...)else if()語句,謝謝 – 2015-02-05 16:17:06