TransactionStatusPublisher.java

package com.designpatterns.behavioral.observer.applied;

import java.util.ArrayList;
import java.util.List;

public class TransactionStatusPublisher {

    private final List<TransactionStatusObserver> observers = new ArrayList<>();

    public void subscribe(TransactionStatusObserver observer) {
        observers.add(observer);
    }

    public void unsubscribe(TransactionStatusObserver observer) {
        observers.remove(observer);
    }

    public void publish(String transactionId, TransactionStatus newStatus) {
        for (TransactionStatusObserver observer : observers) {
            observer.onStatusChanged(transactionId, newStatus);
        }
    }
}