用观察者模式设计类图实现可变数据的显示:例如超市当日的销售数据,希望实现表格、柱状图、饼状图进行显示
时间: 2024-09-24 10:14:52 浏览: 29
观察者模式是一种行为设计模式,它使得一个主题对象(如超市销售数据)能够通知它的订阅者(如表格、柱状图和饼状图)当其状态发生改变时。在设计类图时,可以创建以下几个角色:
1. **主题(Subject)**:超市销售数据,存储销售信息并维护一组观察者。例如,`SalesData` 类,包含数据集合和一个观察者列表。
```java
class SalesData {
private List<Observer> observers;
private Map<Product, Integer> sales;
// 添加/更新销售数据
void updateSales(Product product, int quantity) {
sales.put(product, quantity);
notifyObservers();
}
// 添加/移除观察者
void addObserver(Observer observer) {
observers.add(observer);
}
void removeObserver(Observer observer) {
observers.remove(observer);
}
// 触发所有观察者的更新
private void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
}
```
2. **观察者(Observer)**:负责接收和处理数据变化的行为,比如 `TableDisplay`, `BarChart`, 和 `PieChart` 类。
```java
interface Observer {
void update(SalesData data);
}
class TableDisplay implements Observer {
public void update(SalesData salesData) {
displayTable(salesData.sales);
}
}
class BarChart implements Observer {
public void update(SalesData salesData) {
displayBarChart(salesData.sales);
}
}
class PieChart implements Observer {
public void update(SalesData salesData) {
displayPieChart(salesData.sales);
}
}
```
当超市的销售数据有新的变动(添加或更新产品销量),`SalesData` 会调用 `notifyObservers()` 来广播这个消息给所有的观察者,观察者则根据自己需要的方式更新显示。