Подробнее на 👉 refactoring.guru
#include <iostream>
// Интерфейс состояния
class State {
public:
virtual void handle() = 0;
};
// Конкретное состояние 1
class ConcreteState1 : public State {
public:
void handle() override {
std::cout << "Обработка в конкретном состоянии 1" << std::endl;
}
};
// Конкретное состояние 2
class ConcreteState2 : public State {
public:
void handle() override {
std::cout << "Обработка в конкретном состоянии 2" << std::endl;
}
};
// Контекст
class Context {
private:
State* state;
public:
void setState(State* newState) { state = newState; }
void request() { state->handle(); }
};
// Клиентский код
int main() {
Context context;
ConcreteState1 state1;
ConcreteState2 state2;
context.setState(&state1);
context.request();
context.setState(&state2);
context.request();
return 0;
}
Будет напечатано:
Обработка в конкретном состоянии 1 Обработка в конкретном состоянии 2
abstract class State {
void handle();
}
class ConcreteState1 implements State {
@override
void handle() {
print('Обработка в конкретном состоянии 1');
}
}
class ConcreteState2 implements State {
@override
void handle() {
print('Обработка в конкретном состоянии 2');
}
}
class Context {
State? _state;
void setState(State newState) {
_state = newState;
}
void request() {
_state?.handle();
}
}
void main() {
var context = Context();
var state1 = ConcreteState1();
var state2 = ConcreteState2();
context.setState(state1);
context.request();
context.setState(state2);
context.request();
}
Будет напечатано:
Обработка в конкретном состоянии 1 Обработка в конкретном состоянии 2