Вы действительно используете шаблон стратегии, но ваша реализация содержит ошибки: стратегия вставляет элементы в свой закрытый список, отличный от списка, содержащего стратегию.
Интерфейс Стратегии должен выглядеть следующим образом:
interface Strategy {
void execute(String a, DoubleLinkedList list);
}
Конкретная реализация должна выглядеть так:
public class ConcreteStrategyAdd implements Strategy {
public void execute(String a, DoubleLinkedList list) {
System.out.println("Called ConcreteStrategyAdd's execute()");
list.insertReverseAlphabeticalOrder(a);
}
}
И метод executeStrategy должен быть
public void executeStrategy(String a) {
strategy.execute(a, this);
}
Кроме того, цель паттерна стратегии состоит в том, чтобы иметь возможность настраивать поведение некоторого объекта без непосредственного изменения класса этого объекта. Я думаю, что ваш класс DoubleLInkedList не должен иметь метод insertReverseAlphabeticalOrder
. Он должен просто иметь метод insert
, а конкретная стратегия должна реализовывать логику в обратном алфавитном порядке, а затем вызывать insert()
.
Я не знаю, что делает этот метод, поэтому приведу другой пример. Предположим, что вы хотите вставить «nhoJ» в список, когда «John» передается методу executeStrategy()
. Эту стратегию можно назвать «ReverseStringInsertStrategy». Его реализация будет:
public void execute(String a, DoubleLinkedList list) {
String reversed = reverseString(a);
list.insert(reversed);
}
Теперь предположим, что вы хотите вставить «JOHN» в список, когда «John» передается методу executeStrategy()
. Эту стратегию можно назвать «UppercaseStringInsertStrategy». Его реализация будет:
public void execute(String a, DoubleLinkedList list) {
String uppercased = uppercaseString(a);
list.insert(uppercased);
}