-
Notifications
You must be signed in to change notification settings - Fork 0
/
order-state.php
142 lines (112 loc) · 3.35 KB
/
order-state.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/***
Durumlar (States)
* Yeni Sipariş Alındı (NewOrderState)
* Sipariş İşleniyor/Hazırlanıyor (ProcessingState)
* Sipariş Paketleniyor (PackagingState)
* Sipariş Yolda/Gönderimde (OnTheWayState)
* Sipariş Teslim Edildi (DeliveredState)
* Sipariş Tamamlandı (CompletedState)
*/
interface IOrderState {
public function next($order);
public function previous($order);
public function getCurrentStatus();
}
class Order {
private $state;
public function __construct() {
$this->state = new NewOrderState();
}
public function setState($state) {
$this->state = $state;
}
public function nextState() {
$this->state->next($this);
}
public function previousState() {
$this->state->previous($this);
}
public function getOrderState() {
$this->state->getCurrentStatus();
}
}
class CompletedState implements IOrderState {
public function next($order) {
echo "Bu durumun sonrası yoktur. Bu son durumdur. ❌\n";
}
public function previous($order) {
$order->setState(new DeliveredState());
}
public function getCurrentStatus() {
echo "Sipariş Tamamlandı ✅\n";
}
}
class DeliveredState implements IOrderState {
public function next($order) {
$order->setState(new CompletedState());
}
public function previous($order) {
$order->setState(new OnTheWayState());
}
public function getCurrentStatus() {
echo "Sipariş Teslim Edildi 🚚\n";
}
}
class OnTheWayState implements IOrderState {
public function next($order) {
$order->setState(new DeliveredState());
}
public function previous($order) {
$order->setState(new PackagingState());
}
public function getCurrentStatus() {
echo "Sipariş Yolda 🛣️\n";
}
}
class ProcessingState implements IOrderState {
public function next($order) {
$order->setState(new PackagingState());
}
public function previous($order) {
$order->setState(new NewOrderState());
}
public function getCurrentStatus() {
echo "Sipariş İşleme Alınıyor 🏭\n";
}
}
class PackagingState implements IOrderState {
public function next($order) {
$order->setState(new OnTheWayState());
}
public function previous($order) {
$order->setState(new ProcessingState());
}
public function getCurrentStatus() {
echo "Sipariş Paketleniyor 📦\n";
}
}
class NewOrderState implements IOrderState {
public function next($order) {
$order->setState(new ProcessingState());
}
public function previous($order) {
echo "Bu durumun öncesi yoktur. Bu ilk durumdur. ❌\n";
}
public function getCurrentStatus() {
echo "Sipariş Verildi 📝\n";
}
}
$order = new Order(); // Sipariş Oluşturuluyor...
$order->getOrderState(); // Sipariş Verildi 📝
$order->nextState();
$order->getOrderState(); // Sipariş Paketleniyor 📦
$order->nextState();
$order->getOrderState(); // Sipariş İşleme Alınıyor 🏭
$order->nextState();
$order->getOrderState(); // Sipariş Yolda 🛣️
$order->nextState();
$order->getOrderState(); // Sipariş Teslim Edildi 🚚
$order->nextState();
$order->getOrderState(); // Sipariş Tamamlandı ✅
$order->nextState(); // Bu durumun sonrası yoktur. Bu son durumdur. ❌