差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| study:java:design_pattern:observer [2008/08/11 11:50] – created banana | study:java:design_pattern:observer [2009/07/08 07:40] (現在) – banana | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== the definition of Observer Pattern ====== | ====== the definition of Observer Pattern ====== | ||
| - | 옵저버 패턴은 신문사와 정기구독자로 이루어지는 신문 구독 서비스에 비유해서 생각하면 됩니다. | + | 옵저버 패턴은 신문사와 정기구독자로 이루어지는 신문 구독 서비스에 비유해서 생각하면 됩니다.\\ |
| 하지만 보통 옵저버 패턴은 다음과 같은 식으로 정의됩니다. | 하지만 보통 옵저버 패턴은 다음과 같은 식으로 정의됩니다. | ||
| < | < | ||
| 行 8: | 行 8: | ||
| </ | </ | ||
| 일대다 관계는 주제와 옵저버에 의해 정의됩니다. 옵저버는 주제에 의존합니다. | 일대다 관계는 주제와 옵저버에 의해 정의됩니다. 옵저버는 주제에 의존합니다. | ||
| - | 주제의 상태가 바뀌면 옵저버한테 연락이 가지요. 연락 방법에 따라 옵저버에 있는 값이 | + | 주제의 상태가 바뀌면 옵저버한테 연락이 가지요. |
| 새로운 값으로 갱신될 수도 있습니다. | 새로운 값으로 갱신될 수도 있습니다. | ||
| - | 옵저버 패턴을 구현하는 방법에는 여러 가지가 있지만, 대부분 주제(Subject)인터페이스와 | + | 옵저버 패턴을 구현하는 방법에는 여러 가지가 있지만,\\ 대부분 주제(Subject)인터페이스와 |
| 옵저버(Observer)인터페이스가 들어있는 클래스 디자인을 바탕으로 합니다. | 옵저버(Observer)인터페이스가 들어있는 클래스 디자인을 바탕으로 합니다. | ||
| 한번 직접 살펴보죠. | 한번 직접 살펴보죠. | ||
| + | |||
| + | {{keywords> | ||
| + | |||
| + | ===== Class Diagram ===== | ||
| + | {{: | ||
| + | |||
| + | ===== Design of weather report system ===== | ||
| + | {{: | ||
| + | |||
| + | ===== interface ===== | ||
| + | <code java> | ||
| + | public interface Subject{ | ||
| + | public void registerObserver(Observer o); | ||
| + | public void removeObserver(Observer o); | ||
| + | public void notifyObservers(); | ||
| + | } | ||
| + | |||
| + | public interface Observer{ | ||
| + | public void update(float temp, float humidity, float pressure); | ||
| + | } | ||
| + | |||
| + | public interface DisplayElement{ | ||
| + | public void display(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== snippet of WeatherData ===== | ||
| + | <code java> | ||
| + | public class WeatherData implements Suject{ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | int i = observers.indexOf(o); | ||
| + | | ||
| + | observers.remove(i); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | Observer observer = (Observer) observers.get(i); | ||
| + | observer.update(temperature, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | // | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== snippet of CurrentConditionsDisplay ===== | ||
| + | <code java> | ||
| + | public class CurrentConditionsDisplay implements Observer, DisplayElement{ | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Test class ===== | ||
| + | <code java> | ||
| + | public class WeatherStation{ | ||
| + | public static void main(String[] args){ | ||
| + | | ||
| + | |||
| + | | ||
| + | new CurrentConditionsDisplay(weatherData); | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||