Choose Language

Apply ⏱ 22 min

Observer Pattern – Design Patterns (ep 2)

What You Will Learn

  • オブザーバーパターンの基本概念を理解する
  • オブザーバーパターンの実装方法を学ぶ
  • オブザーバーパターンの利点と用途を知る

Key Concepts

オブザーバーパターンは、オブジェクト間の依存関係を定義するデザインパターンの一つです。オブザーバーパターンでは、観察対象のオブジェクト(サブジェクト)と、サブジェクトの状態変更を知りたいオブジェクト(オブザーバー)があります。サブジェクトの状態が変更されると、オブザーバーに通知します。オブザーバーパターンは、プッシュとプルの2つのアプローチで実装できます。プッシュアプローチでは、サブジェクトがオブザーバーに変更を通知します。プルアプローチでは、オブザーバーがサブジェクトに変更を問い合わせます。

Code Examples

public void add(Observer o) {
    this.observers.add(o);
}

オブザーバーを追加するメソッドの例。

public void notify() {
    for (Observer o : observers) {
        o.update();
    }
}

オブザーバーに通知を送るメソッドの例。

public void update() {
    // サブジェクトの状態を取得して処理する
}

オブザーバーの更新メソッドの例。

Lesson Summary

オブザーバーパターンは、オブジェクト間の依存関係を定義するデザインパターンの一つです。オブザーバーパターンでは、観察対象のオブジェクト(サブジェクト)と、サブジェクトの状態変更を知りたいオブジェクト(オブザーバー)があります。サブジェクトの状態が変更されると、オブザーバーに通知します。オブザーバーパターンは、プッシュとプルの2つのアプローチで実装できます。プッシュアプローチでは、サブジェクトがオブザーバーに変更を通知します。プルアプローチでは、オブザーバーがサブジェクトに変更を問い合わせます。オブザーバーパターンの利点は、オブジェクト間の依存関係を疎結合にすることができることです。オブザーバーパターンの用途は、イベント駆動型のシステムや、データの変更を通知するシステムなどです。

Practice Exercise

次のクラスをオブザーバーパターンで実装してください。

public class WeatherStation {
    private int temperature;

    public void setTemperature(int temperature) {
        this.temperature = temperature;
    }

    public int getTemperature() {
        return temperature;
    }
}

public class Display {
    public void update(int temperature) {
        System.out.println("現在の温度は" + temperature + "度です。");
    }
}

WeatherStationクラスをオブザーバーパターンで実装し、DisplayクラスがWeatherStationクラスの温度の変更を通知を受けるようにしてください。

What Is Next

次のレッスンでは、ストラテジーパターンについて学習します。ストラテジーパターンは、アルゴリズムの家族を定義し、それぞれのアルゴリズムをカプセル化するデザインパターンの一つです。ストラテジーパターンの利点と用途についても学習します。