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 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); } } }