行为型设计模式实训,利用观察者模式实现股票信息接收。实例说明: 某在线股票软件需要提供如下功能:当股票购买者所购买的某支股票 价格变化幅度达到 5%时,系统将自动发送通知(包括新价格)给购买 该股票的股民。现使
时间: 2023-07-15 22:15:08 浏览: 367
用观察者模式来实现这个功能,需要定义两个角色:观察者和被观察者。
首先,我们需要定义一个被观察者类,该类包含股票的价格信息,并且可以添加和删除观察者。当股票价格发生变化时,该类会通知所有观察者。
```java
import java.util.ArrayList;
import java.util.List;
public class Stock {
private String name;
private double price;
private List<Observer> observers;
public Stock(String name, double price) {
this.name = name;
this.price = price;
this.observers = new ArrayList<>();
}
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void setPrice(double price) {
double oldPrice = this.price;
this.price = price;
if (Math.abs(price - oldPrice) / oldPrice >= 0.05) {
notifyObservers();
}
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
private void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
}
```
然后,我们需要定义一个观察者接口,该接口包含一个更新方法,用于在被观察者通知观察者时调用。
```java
public interface Observer {
void update(Stock stock);
}
```
最后,我们需要定义一个具体的观察者类,该类实现了观察者接口,在更新方法中实现了具体的通知逻辑。
```java
public class StockObserver implements Observer {
private String name;
public StockObserver(String name) {
this.name = name;
}
@Override
public void update(Stock stock) {
System.out.println(name + " received notification: " + stock.getName() + " price has changed to " + stock.getPrice());
}
}
```
使用示例:
```java
public class Test {
public static void main(String[] args) {
Stock stock = new Stock("Apple", 100.0);
StockObserver observer1 = new StockObserver("John");
StockObserver observer2 = new StockObserver("Mike");
stock.attach(observer1);
stock.attach(observer2);
stock.setPrice(110.0); // no notification
stock.setPrice(120.0); // no notification
stock.setPrice(130.0); // no notification
stock.setPrice(140.0); // notification sent to John and Mike
stock.detach(observer2);
stock.setPrice(150.0); // notification sent to John only
}
}
```