Одна проблема, которую я вижу в вашем подходе, заключается в том, что между конкретным классом Context и экземплярами классов Strategy будет сильная связь. Это подразумевает, что классы Strategy могут использоваться только с классом Context. Один из способов обойти это состоит в том, чтобы сделать ваши классы стратегии зависимыми (или использовать) интерфейс, который реализует класс 'Context'.
EDIT
Также, когда у классов Стратегии есть экземпляр класса Context, эти классы должны явно получать данные из класса Context. Это будет означать добавление геттеров (при необходимости) в класс Context для классов стратегии, чтобы получить необходимые данные. Но добавление геттеров не обязательно является хорошей практикой ОО, так как большее количество геттеров представляет риск нарушения инкапсуляции.
Альтернативой, которую вы можете придумать, является , а не передача ссылки (этого) класса Context на метод (ы) в классе стратегии, но передача только необходимых данных в класс Strategy.
Например, если класс Context выглядит примерно так: (код на Java)
</p>
<pre><code>Context {
IStrategy strategy;
List<Integer> scores;
public Context(IStrategy strategy)
{
this.strategy = strategy;
scores = new ArrayList<Integer>
}
public print() {
strategy.sort(scores);
}
}
public interface IStrategy<Integer> {
public void sort(List<Integer> l);
}
В приведенном выше коде класс Strategy работает с общим списком Integer и не связан с классом Context.
Кроме того, при определении класса Strategy можно использовать универсальный метод, чтобы метод sort применим не только к целым числам, но и к универсальным типам.