-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOrderProcessor.java
More file actions
146 lines (122 loc) · 4.2 KB
/
OrderProcessor.java
File metadata and controls
146 lines (122 loc) · 4.2 KB
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
143
144
145
146
/**
* Объяснение изменений
* Принцип единственной ответственности (SRP):
*
* Каждый класс теперь отвечает за одну конкретную задачу.
*
* OrderProcessor только управляет обработкой.
*
* Сервисы выполняют конкретные операции.
*
* Принцип инверсии зависимостей (DIP):
*
* Использованы интерфейсы для сервисов.
*
* Класс OrderProcessor зависит от абстракций, а не реализаций.
*
* Улучшенное именование:
*
* Названия классов и методов теперь информативны.
*
* Понятна цель каждого компонента.
*/
package Architecture;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// Интерфейс для обработки заказов
interface OrderHandler {
void handle(Order order);
}
// Класс для обработки подтвержденных заказов
class ConfirmedOrderHandler implements OrderHandler {
private EmailService emailService;
private InventoryService inventoryService;
private InvoiceService invoiceService;
public ConfirmedOrderHandler(EmailService emailService,
InventoryService inventoryService,
InvoiceService invoiceService) {
this.emailService = emailService;
this.inventoryService = inventoryService;
this.invoiceService = invoiceService;
}
@Override
public void handle(Order order) {
emailService.sendConfirmation(order);
inventoryService.updateStock(order);
invoiceService.generate(order);
}
}
// Класс для обработки отгруженных заказов
class ShippedOrderHandler implements OrderHandler {
private ShippingService shippingService;
public ShippedOrderHandler(ShippingService shippingService) {
this.shippingService = shippingService;
}
@Override
public void handle(Order order) {
shippingService.updateStatus(order);
}
}
// Основной класс обработки заказов
public class OrderProcessor {
private List<Order> orders;
private Map<String, OrderHandler> handlers;
public OrderProcessor(List<Order> orders) {
this.orders = orders;
initializeHandlers();
}
private void initializeHandlers() {
handlers = new HashMap<>();
handlers.put("confirmed", new ConfirmedOrderHandler(
new EmailService(),
new InventoryService(),
new InvoiceService()
));
handlers.put("shipped", new ShippedOrderHandler(new ShippingService()));
}
public void processOrders() {
for (Order order : orders) {
OrderHandler handler = handlers.get(order.getStatus());
if (handler != null) {
handler.handle(order);
}
}
}
}
// Сервисы для конкретных задач
class EmailService {
public void sendConfirmation(Order order) {
System.out.println("Sending confirmation email for order #" + order.getId());
}
}
class InventoryService {
public void updateStock(Order order) {
System.out.println("Updating inventory for order #" + order.getId());
}
}
class InvoiceService {
public void generate(Order order) {
System.out.println("Generating invoice for order #" + order.getId());
}
}
class ShippingService {
public void updateStatus(Order order) {
System.out.println("Updating shipping status for order #" + order.getId());
}
}
// Класс заказа
class Order {
private int id;
private String status;
public Order(int id, String status) {
this.id = id;
this.status = status;
}
public int getId() {
return id;
}
public String getStatus() {
return status;
}
}