В моем понимании шаблон стратегии используется для того, чтобы сделать поведение взаимозаменяемым. Это предполагает, что ответственность за стратегию определяется в интерфейсе, которому клиент затем может делегировать вызовы. Например. предположим, что значение можно получить разными способами, в интерфейсе должен быть метод «getValue()».
Мой вопрос касается случая, когда поток управления противоположен. Например, если конкретная стратегия инициирует запрос «onValueChanged()» на клиенте (предположим, что он имеет ссылку на клиента или интерфейс обратного вызова).
Это все еще считается шаблоном стратегии?
Обновление: добавлен следующий пример исходного кода:
interface DataSupplierCb
{
void onValueChanged(int a);
}
interface DataSupplier
{
void check();
}
// NOTE 1: Data supplier knows how the get the value
class ConcreteDataSupplier : public DataSupplier
{
void check()
{
myDataSupplierCb.onValueChanged(47);
}
}
class Client : public DataSupplierCb
{
void onValueChanged(int a)
{
// NOTE 2: Client knows what to do with the value
}
void changeDataSupplier(int i)
{
if (i == 1)
{
myCurrentDataSupplier = new ConcreteDataSupplier(this);
}
}
}
observer
- person sll   schedule 06.02.2012