观察者模式股票问题源代码及uml图
时间: 2023-06-12 08:08:28 浏览: 60
以下是观察者模式股票问题的源代码及 UML 图:
```java
import java.util.ArrayList;
import java.util.List;
// Subject(目标)接口
interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
// ConcreteSubject(具体目标)类
class StockData implements Subject {
private List<Observer> observers;
private double price;
public StockData() {
observers = new ArrayList<>();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer o : observers) {
o.update(price);
}
}
public void setPrice(double price) {
this.price = price;
notifyObservers();
}
}
// Observer(观察者)接口
interface Observer {
void update(double price);
}
// ConcreteObserver(具体观察者)类
class StockBuyer implements Observer {
private String name;
public StockBuyer(String name) {
this.name = name;
}
@Override
public void update(double price) {
System.out.println(name + " received new stock price: " + price);
}
}
// Client(客户端)类
public class Client {
public static void main(String[] args) {
StockData stockData = new StockData();
StockBuyer buyer1 = new StockBuyer("Buyer 1");
StockBuyer buyer2 = new StockBuyer("Buyer 2");
StockBuyer buyer3 = new StockBuyer("Buyer 3");
stockData.registerObserver(buyer1);
stockData.registerObserver(buyer2);
stockData.registerObserver(buyer3);
stockData.setPrice(50.0);
stockData.removeObserver(buyer2);
stockData.setPrice(55.0);
}
}
```
UML 图如下:
![Observer Pattern UML](https://i.imgur.com/3kq7Zx5.png)