반응형
2. Observer Pattern : 특정 데이터를 여러종류의 객체에서 참조하고자 할때, 특정 데이터가 갱신된 것을 문제없이 알림받고 사용할 수 있는 디자인. 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고, 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.
>> 갱신된 정보를 효과적으로 분산 처리하는데 유용하다.
예시) WeatherData
1. Observer.java
1 2 3 4 5 | package chap2; public interface Observer { public void update(float temp, float humid, float pressure); } | cs |
2. Subject.java
1 2 3 4 5 6 7 8 9 10 | package chap2; public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); } | cs |
3. DisplayElement.java
1 2 3 4 5 6 | package chap2; public interface DisplayElement { public void display(); } | cs |
4. WeatherData.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package chap2; import java.util.ArrayList; public class WeatherData implements Subject { private ArrayList observers; private float temperature; private float humidity; private float pressure; public WeatherData() { observers = new ArrayList(); } @Override public void registerObserver(Observer o) { // TODO Auto-generated method stub observers.add(o); } @Override public void removeObserver(Observer o) { // TODO Auto-generated method stub int idx = observers.indexOf(o); if(idx >= 0) observers.remove(idx); } @Override public void notifyObservers() { // TODO Auto-generated method stub for (int i = 0; i < observers.size(); i++) { Observer observer = (Observer) observers.get(i); observer.update(temperature, humidity, pressure); } } public void measurementChanged(){ notifyObservers(); } public void setMeasurements(float t, float h, float p){ this.temperature = t; this.humidity = h; this.pressure = p; measurementChanged(); } } | cs |
5. CurrentConditionDisplay.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package chap2; public class CurrentConditionDisplay implements Observer, DisplayElement { private float temperature; private float humidity; private Subject weatherData; public CurrentConditionDisplay(Subject weatherData) { this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void update(float temp, float humid, float pressure) { // TODO Auto-generated method stub this.temperature = temp; this.humidity = humid; display(); } @Override public void display() { // TODO Auto-generated method stub System.out.println("Current condition : "+temperature +"F degrees and "+humidity+"% humidity"); } } | cs |
반응형
'Computer Science > Theory-Java' 카테고리의 다른 글
[Java] 자바 디자인패턴 #3 - Decorator Pattern (0) | 2016.06.27 |
---|---|
[Java] 자바 디자인패턴#1 - Strategy Pattern (0) | 2016.06.27 |
댓글