场景描述: 假设你正在开发一个在线商城系统,该系统支持用户下单购买商品。当有新的订单生成时,系统需要自动发送一条通知消息给商家和用户,让他们知道订单已生成。 问题描述: 请使用观察者模式实现上述场景中的订单通知功能。 要求: 定义一个订单类,包含订单编号、商品名称、购买数量等属性。 定义一个Observer接口,包含一个update方法,用于接收订单通知消息。 定义一个Subject接口,包含三个方法:添加观察者、移除观察者和通知观察者。 实现一个具体的Subject类,用于管理所有的观察者对象,并在订单生成时通知所有观察者。 实现两个具体的Observer类:商家和用户。 在订单生成时,调用Subject的通知方法,让所有观察者接收到订单通知消息
时间: 2024-02-05 10:10:27 浏览: 22
订单类的定义如下:
```java
public class Order {
private String orderId;
private String productName;
private int quantity;
public Order(String orderId, String productName, int quantity) {
this.orderId = orderId;
this.productName = productName;
this.quantity = quantity;
}
// getters and setters
}
```
Observer接口的定义如下:
```java
public interface Observer {
void update(Order order);
}
```
Subject接口的定义如下:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(Order order);
}
```
具体的Subject类实现如下:
```java
import java.util.ArrayList;
import java.util.List;
public class OrderNotifier implements Subject {
private List<Observer> observers;
public OrderNotifier() {
observers = new ArrayList<>();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(Order order) {
for (Observer observer : observers) {
observer.update(order);
}
}
public void generateOrder(Order order) {
// 订单生成的逻辑
// ...
// 通知所有观察者
notifyObservers(order);
}
}
```
商家和用户的具体Observer类实现如下:
```java
public class Merchant implements Observer {
private String name;
public Merchant(String name) {
this.name = name;
}
@Override
public void update(Order order) {
System.out.println("Dear " + name + ", a new order with id " + order.getOrderId() +
" for product " + order.getProductName() + " has been generated.");
}
}
public class User implements Observer {
private String name;
public User(String name) {
this.name = name;
}
@Override
public void update(Order order) {
System.out.println("Dear " + name + ", your order with id " + order.getOrderId() +
" for product " + order.getProductName() + " has been generated.");
}
}
```
使用示例:
```java
public class Main {
public static void main(String[] args) {
OrderNotifier orderNotifier = new OrderNotifier();
Observer merchant1 = new Merchant("Merchant 1");
Observer merchant2 = new Merchant("Merchant 2");
Observer user1 = new User("User 1");
Observer user2 = new User("User 2");
orderNotifier.registerObserver(merchant1);
orderNotifier.registerObserver(merchant2);
orderNotifier.registerObserver(user1);
orderNotifier.registerObserver(user2);
Order order = new Order("123456", "iPhone", 1);
orderNotifier.generateOrder(order);
// Output:
// Dear Merchant 1, a new order with id 123456 for product iPhone has been generated.
// Dear Merchant 2, a new order with id 123456 for product iPhone has been generated.
// Dear User 1, your order with id 123456 for product iPhone has been generated.
// Dear User 2, your order with id 123456 for product iPhone has been generated.
}
}
```