2013-12-17 4 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

Смежные вопросы