State
Administrator 7/20/2021 OOPPatternBehavioral pattern
# Description
Thay đổi hành vi (behavior) của object khi trạng thái bên trong của object thay đổi
# Example
Quản lí Order:
OrderManager:
class OrderManager { private OrderState $state; public function __construct(OrderState $state) { $this->setState($state); } public function setState(OrderState $state) { $this->state = $state; } public function nextProceed() { $this->state->nextProceed($this); } public function handle() { return $this->state->handle(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24OrderState:
interface OrderState { public function nextProceed(OrderManager $context); public function handle(); }
1
2
3
4
5
6CreatedState:
class CreatedState implements OrderState { public function nextProceed(OrderManager $manager) { $manager->setState(new PaymentState()); } public function handle() { // do something } }
1
2
3
4
5
6
7
8
9
10
11
12PaymentState:
class PaymentState implements OrderState { public function nextProceed(OrderManager $manager) { $manager->setState(new DoneState()); } public function handle() { // do something } }
1
2
3
4
5
6
7
8
9
10
11
12DoneState:
class DoneState implements OrderState { public function nextProceed(OrderManager $manager) { } public function handle() { // do something } }
1
2
3
4
5
6
7
8
9
10
11