Add all 23 GoF design pattern implementations (2026-06-13)
This commit is contained in:
36
03-behavioral/observer/StockMarket.java
Normal file
36
03-behavioral/observer/StockMarket.java
Normal file
@@ -0,0 +1,36 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user