Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-14.log failed
差分
このページの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); | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ |