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