软件设计中使用观察者模式实现订餐管理系统
时间: 2024-05-04 20:19:17 浏览: 16
订餐管理系统可以使用观察者模式来实现订单状态更新的通知。以下是一个示例:
1. 定义观察者接口
```java
public interface Observer {
void update(Order order);
}
```
2. 定义主题接口
```java
public interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers(Order order);
}
```
3. 实现主题接口
```java
public class OrderManager implements Subject {
private List<Observer> observers;
private List<Order> orders;
public OrderManager() {
this.observers = new ArrayList<>();
this.orders = new ArrayList<>();
}
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(Order order) {
for (Observer observer : observers) {
observer.update(order);
}
}
public void addOrder(Order order) {
orders.add(order);
notifyObservers(order);
}
public void updateOrderStatus(int orderId, OrderStatus status) {
for (Order order : orders) {
if (order.getId() == orderId) {
order.setStatus(status);
notifyObservers(order);
break;
}
}
}
}
```
4. 实现观察者接口
```java
public class OrderNotification implements Observer {
private String name;
public OrderNotification(String name) {
this.name = name;
}
@Override
public void update(Order order) {
System.out.println(name + ": Order #" + order.getId() + " status updated to " + order.getStatus());
}
}
```
5. 使用示例
```java
OrderManager orderManager = new OrderManager();
Observer notification1 = new OrderNotification("User1");
Observer notification2 = new OrderNotification("User2");
orderManager.attach(notification1);
orderManager.attach(notification2);
Order order1 = new Order(1, "Pizza", OrderStatus.CREATED);
orderManager.addOrder(order1);
orderManager.updateOrderStatus(1, OrderStatus.PREPARING);
```
输出:
```
User1: Order #1 status updated to PREPARING
User2: Order #1 status updated to PREPARING
```
当有新订单添加或订单状态更新时,观察者会收到通知并进行相应处理。这样就可以实现订餐管理系统的订单状态更新通知功能。