需求:主体有两种事件,观察者可以任意关注其中的某个事件或全部事件,当主体事件发生,通知对应的观察者。 例如:主体是商场,有新货上架和降价两种事件,消费者可以关注其中的一种或全部事件,当降价了,可以通知所有关注降价的消费者。 java代码实现并运行测试
时间: 2024-12-12 11:29:49 浏览: 6
在Java中,我们可以使用观察者模式(Observer Pattern)来实现这个需求,它是一种设计模式,用于定义一对多依赖关系,让多个观察者对象同时监听某一个主题对象(在这种情况下是商场)的变化。
首先,我们需要创建三个类:Subject(商场),Observer(消费者),以及Event(事件)。下面是简单的Java代码示例:
```java
import java.util.ArrayList;
import java.util.List;
// 主题 - 商场
class Mall implements Observable {
private List<Observer> observers = new ArrayList<>();
private String event; // 上架、降价
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void unregisterObserver(Observer observer) {
observers.remove(observer);
}
public void fireEvent(String eventType) {
this.event = eventType;
notifyObservers();
}
protected void notifyObservers() {
for (Observer observer : observers) {
observer.update(event);
}
}
}
// 观察者 - 消费者
interface Observer {
void update(String event);
}
// 具体观察者 - 关注新货上架或降价的消费者
class Shoppers implements Observer {
@Override
public void update(String event) {
if ("降价".equals(event)) {
System.out.println("消费者收到降价通知");
} else if ("新货上架".equals(event)) {
System.out.println("消费者收到新货上架通知");
}
}
}
public class Main {
public static void main(String[] args) {
Mall mall = new Mall();
// 创建两个消费者
Shoppers shopper1 = new Shoppers();
Shoppers shopper2 = new Shoppers();
// 注册观察者
mall.registerObserver(shopper1);
mall.registerObserver(shopper2);
// 发生事件 - 新货上架
mall.fireEvent("新货上架");
// 发生事件 - 降价
mall.fireEvent("降价");
// 移除一个消费者
mall.unregisterObserver(shopper1);
}
}
```
在这个例子中,我们首先创建了一个Mall对象,然后创建了两个Shoppers对象作为观察者。商场注册了这两个观察者,并在新货上架和降价时分别触发通知。每个Shoppers会根据接收到的event更新自己的状态。
阅读全文