Files
design-patterns/03-behavioral/observer/StockMarket.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);
}
}
}