2013-12-17 174 views
0

我正在嘗試編寫一個小分類器程序。 但是我所擁有的數據並沒有完全確定,所以我試圖儘可能使代碼儘可能通用。 我遇到了這個問題。從抽象類型初始化子類

我已經基本上3類

abstract class AbstractPoint{} 
abstract class AbstractCluster{} 

class Classifier{ 
addPoint(AbstractPoint pt){...} 
} 

我沒事了這一點。 但是在分類器類中,如果點符合特定模式 我需要創建一個集羣以將點添加到。 但它不可能基於抽象類來實例化對象。 有沒有什麼好的方法/模式?或其他方式可以做到這一點?

+2

這不是完全清楚你以後,但你可能會尋找一個工廠模式。將一個方法添加到'AbstractPoint'中是否可以返回適當的具體'AbstractCluster'? – chrylis

+0

這聽起來像你需要一些具體的類以及這些抽象的類。也許你應該編寫一個或多個擴展'AbstractCluster'的類,以便實際實例化。 –

+0

我認爲工廠模式正是我正在尋找的!謝謝! – Pita

回答

0

你可以試試這個:

abstract class AbstractPoint{ public abstract void doThings();} 
abstract class AbstractCluster{ 
    AbstractPoint[] points; 
    public abstract void setPoints(AbstractPoint[] points); 
    public AbstractPoint[] getPoints() { 
     return points; 
    } 
} 

class Classifier{ 
public void addPoint(AbstractPoint pt){ 
    pt.doThings(); 
} 
public void addPointsToCluster(AbstractCluster cl,AbstractPoint[] points) { 
    if(condition) //your condition of pattern matching 
    cl.setPoints(points); 
} 
} 
+0

我需要在分類器內初始化一個集羣。 – Pita

+0

請參閱上述編輯。這是你的要求嗎? – anon