Стратегия, это правильно? - PullRequest
2 голосов
/ 17 февраля 2012

В паттерне стратегии можно ли использовать только некоторую логику в стратегии, а навыки сохранять часть в моем собственном коде, будет ли это все еще паттерном стратегии?

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

Или вся сортировка должна быть сделана в паттерне стратегии, чтобы он был "ЧИСТЫМ" паттерном стратегии?

public interface IInsertStrategy<T> {
public boolean insertAfter(T insertValue, T testValue);
}

и код добавления

public void add(T value)
{
    DoublyLinkedNode<T> workingNode = head;

    // Loop though nodes, to and with the tail
    while(workingNode.next != null)
    {
        workingNode = workingNode.next;
        /* Keep going until the strategy is not true any more
         * or until we have the last node. */
        if(workingNode.next == null ||
            !insertStrategy.insertAfter(value, workingNode.value))
        {
            workingNode.previous.append(value);
            break;
        }
    }
}

1 Ответ

2 голосов
/ 17 февраля 2012

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

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