Я не изучал шаблоны проектирования, но готов поспорить, что есть один для того, что мне нужно сделать. Я запускаю множество различных алгоритмов на пару деревьев. Все они реализуют интерфейс:
public interface DistanceMetric {
public double distance(AbstractTree<String> t1, AbstractTree<String> t2);
}
public class concreteDistanceAlgorithmV1 implements DistanceMetric{
public double distance(AbstractTree<String> t1, AbstractTree<String> t2){
// algorithm methods
return distance;
}
}
Однако внезапно мне теперь нужны две версии каждого алгоритма, одна из которых описана выше, а вторая - это вариант с предварительно обработанным первым деревом:
public interface DistanceMetricType2 {
public double distance(AbstractTree<String> t);
}
public class concreteDistanceAlgorithmV2 implements DistanceMetricType2{
private Object transformation1;
public concreteDistanceAlgorithmV2(AbstractTree<String> t1){
transformation1 = process(t1);
}
public double distance(AbstractTree<String> t2){
Object transformation2 = process(t2);
//algorithm involving both transformations
return distance;
}
}
Должен ли быть лучший способ, чем создание двух классов для каждого алгоритма? Это использование для шаблона стратегии или подобное? Как я могу изменить то, что мне нужно, чтобы лучше использовать принципы хорошего дизайна?