package observer; /** Fires an alert when the price changes by more than a threshold % */ public class AlertObserver implements StockObserver { private final String name; private final double thresholdPercent; public AlertObserver(String name, double thresholdPercent) { this.name = name; this.thresholdPercent = thresholdPercent; } @Override public void onPriceChanged(String ticker, double oldPrice, double newPrice) { double change = Math.abs((newPrice - oldPrice) / oldPrice * 100); if (change >= thresholdPercent) { System.out.printf(" [ALERT:%s] %s moved %.1f%% — ALERT TRIGGERED%n", name, ticker, change); } else { System.out.printf(" [Alert:%s] %s moved %.1f%% — within threshold%n", name, ticker, change); } } }