Подробнее на 👉 refactoring.guru
#include <iostream>
// Интерфейс стратегии
class Strategy {
public:
virtual void execute() = 0;
};
// Конкретная стратегия 1
class ConcreteStrategy1 : public Strategy {
public:
void execute() override {
std::cout << "Выполняется конкретная стратегия 1" << std::endl;
}
};
// Конкретная стратегия 2
class ConcreteStrategy2 : public Strategy {
public:
void execute() override {
std::cout << "Выполняется конкретная стратегия 2" << std::endl;
}
};
// Контекст
class Context {
private:
Strategy* strategy;
public:
Context(Strategy* strategy) : strategy(strategy) {}
void setStrategy(Strategy* newStrategy) { strategy = newStrategy; }
void executeStrategy() { strategy->execute(); }
};
// Клиентский код
int main() {
ConcreteStrategy1 strategy1;
ConcreteStrategy2 strategy2;
Context context(&strategy1);
context.executeStrategy();
context.setStrategy(&strategy2);
context.executeStrategy();
return 0;
}
Будет напечатано:
Выполняется конкретная стратегия 1 Выполняется конкретная стратегия 2
abstract class Strategy {
void execute();
}
class ConcreteStrategy1 implements Strategy {
@override
void execute() {
print('Выполняется конкретная стратегия 1');
}
}
class ConcreteStrategy2 implements Strategy {
@override
void execute() {
print('Выполняется конкретная стратегия 2');
}
}
class Context {
Strategy? _strategy;
Context(Strategy strategy) {
_strategy = strategy;
}
void setStrategy(Strategy newStrategy) {
_strategy = newStrategy;
}
void executeStrategy() {
_strategy?.execute();
}
}
void main() {
var strategy1 = ConcreteStrategy1();
var strategy2 = ConcreteStrategy2();
var context = Context(strategy1);
context.executeStrategy();
context.setStrategy(strategy2);
context.executeStrategy();
}
Будет напечатано:
Выполняется конкретная стратегия 1 Выполняется конкретная стратегия 2