Ищу дизайн шаблона - PullRequest
       16

Ищу дизайн шаблона

0 голосов
/ 07 августа 2009

Я не изучал шаблоны проектирования, но готов поспорить, что есть один для того, что мне нужно сделать. Я запускаю множество различных алгоритмов на пару деревьев. Все они реализуют интерфейс:

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;
    }
}

Должен ли быть лучший способ, чем создание двух классов для каждого алгоритма? Это использование для шаблона стратегии или подобное? Как я могу изменить то, что мне нужно, чтобы лучше использовать принципы хорошего дизайна?

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Если вам нужно выбрать алгоритм во время выполнения, посмотрите шаблон стратегии . Шаблон «Стратегия» предоставляет интерфейс, который реализуют все алгоритмы. Затем вы можете создать соответствующий алгоритм и вызвать его метод execute ().

Если вам нужно изменить части алгоритма, проверьте шаблон метода шаблона . В шаблонном методе модификации алгоритма переопределяют соответствующие методы, чтобы обеспечить альтернативные способы достижения точно такой же цели. Обычно это делается с помощью наследования абстрактного класса.

0 голосов
/ 07 августа 2009

Я думаю, что вы правы, сейчас самое время использовать шаблон стратегии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...