← 一覧に戻る

Observer

振る舞いパターン

オブジェクトの状態変化を複数の依存オブジェクトに自動通知する。疎結合なイベント駆動設計を実現。

目次
  1. クラス図
  2. シーケンス図
  3. 使いどころ
  4. コード例
  5. AIプロンプト例
  6. 関連パターン

クラス図

シーケンス図

使いどころ

コード例

Observerインターフェース

public interface StockObserver {
    void onStockChange(String productId, int oldQuantity, int newQuantity);
}

Subject(監視対象)

public class StockManager {
    private final Map<String, Integer> stock = new ConcurrentHashMap<>();
    private final List<StockObserver> observers = new CopyOnWriteArrayList<>();

    public void addObserver(StockObserver observer) {
        observers.add(observer);
    }

    public void removeObserver(StockObserver observer) {
        observers.remove(observer);
    }

    public void updateStock(String productId, int newQuantity) {
        int oldQuantity = stock.getOrDefault(productId, 0);
        stock.put(productId, newQuantity);
        notifyObservers(productId, oldQuantity, newQuantity);
    }

    private void notifyObservers(String productId, int oldQty, int newQty) {
        for (StockObserver observer : observers) {
            observer.onStockChange(productId, oldQty, newQty);
        }
    }
}

具体的なObserver

public class LowStockAlertObserver implements StockObserver {
    private final int threshold;

    @Override
    public void onStockChange(String productId, int oldQty, int newQty) {
        if (newQty <= threshold && oldQty > threshold) {
            System.out.println("在庫警告: " + productId);
        }
    }
}

public class StockLogObserver implements StockObserver {
    @Override
    public void onStockChange(String productId, int oldQty, int newQty) {
        System.out.printf("[LOG] %s: %d → %d%n", productId, oldQty, newQty);
    }
}

使用例

StockManager stockManager = new StockManager();

// Observerを登録
stockManager.addObserver(new StockLogObserver());
stockManager.addObserver(new LowStockAlertObserver(5));

// 在庫更新 → 全Observerに自動通知
stockManager.updateStock("PROD-A", 100);
stockManager.updateStock("PROD-A", 3);  // アラート発生

AIプロンプト例

カスタマイズ用プロンプト

以下のObserverパターンを作成してください。

【用途】
注文状態の変更通知

【イベント種類】
・ORDER_CREATED - 注文作成
・PAYMENT_COMPLETED - 決済完了
・SHIPPED - 発送完了

【Observer】
1. EmailNotifier - 顧客へのメール通知
2. SlackNotifier - 社内Slack通知
3. AnalyticsLogger - 分析用ログ記録
← 一覧に戻る