37 lines
1.2 KiB
Java
37 lines
1.2 KiB
Java
package observer;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Subject (Observable) — maintains a list of observers and notifies them
|
|
* when the stock price changes. Observers register and deregister freely.
|
|
*/
|
|
public class StockMarket {
|
|
private final String ticker;
|
|
private double price;
|
|
private final List<StockObserver> observers = new ArrayList<>();
|
|
|
|
public StockMarket(String ticker, double initialPrice) {
|
|
this.ticker = ticker;
|
|
this.price = initialPrice;
|
|
System.out.println("[Market] " + ticker + " initialised at $" + initialPrice);
|
|
}
|
|
|
|
public void subscribe(StockObserver observer) { observers.add(observer); }
|
|
public void unsubscribe(StockObserver observer) { observers.remove(observer); }
|
|
|
|
public void setPrice(double newPrice) {
|
|
double old = this.price;
|
|
this.price = newPrice;
|
|
System.out.printf("[Market] %s price: $%.2f -> $%.2f%n", ticker, old, newPrice);
|
|
notifyObservers(old, newPrice);
|
|
}
|
|
|
|
private void notifyObservers(double old, double newPrice) {
|
|
for (StockObserver o : observers) {
|
|
o.onPriceChanged(ticker, old, newPrice);
|
|
}
|
|
}
|
|
}
|