디자인 패턴 - 옵저버 패턴
옵저버패턴
한 객체의 상태가 바뀌면 그 객체를 의존하는 다른 객체에도 자동으로 갱신되는 방식으로 일대다(one to many) 의존성을 지닌다.
Watcher.java**
package observer.java.util.observer;
import java.util.Observable;
/**
* <https://examples.javacodegeeks.com/core-java/util/observer/java-util-observer-example/>
* <http://egloos.zum.com/iilii/v/3902774>
*
* 변화를 통보하는 중계기
*
* @author 정명성
* @create date : 2016. 5. 6.
* observer.java.util.observer.KoreaWeatherCenter.java
*/
public class Watcher extends Observable {
public void setWeather(String weather) {
setChanged();
notifyObservers(weather);
}
}
koreanWeatherCenter.java**
package observer.java.util.observer;
import java.util.Observable;
import java.util.Observer;
public class KoreaWeatherCenter implements Observer {
private String weather;
@Override
public void update(Observable o, Object arg) {
if (o instanceof Watcher) {
this.weather = (String) arg;
System.out.println("오늘의 날씨는 " + weather + "입니다.");
}
}
}
NewyorkWeatherCenter.java
package observer.java.util.observer;
import java.util.Observable;
import java.util.Observer;
public class NewyorkWeatherCenter implements Observer {
private String weather;
@Override
public void update(Observable o, Object arg) {
if (o instanceof Watcher) {
this.weather = (String) arg;
System.out.println("today is wheater " + weather);
}
}
}
Demo.java
package observer.java.util.observer;
public class Demo {
public static void main(String[] args) {
Watcher watcher = new Watcher();
KoreaWeatherCenter kwc = new KoreaWeatherCenter();
NewyorkWeatherCenter nwc = new NewyorkWeatherCenter();
watcher.addObserver(kwc);
watcher.addObserver(nwc);
System.out.println("날씨변함");
watcher.setWeather("windy");
System.out.println("날씨변함");
watcher.setWeather("맑음");
}
}
https://github.com/audtjddld/pattern/tree/master/pattern/src/observer
https://github.com/audtjddld/pattern
audtjddld/patternContribute to pattern development by creating an account on GitHub.github.com
—————————– 2016. 11. 11 ——————
java script로 해봤다.
var subject = {
arr : new Array(),
state : 1,
setState : function(value) {
this.state = value;
this.updateNotice();
},
attach : function (obj) {
this.arr.push(obj);
},
getState : function() {
return obj.state + this.state;
},
updateNotice: function() {
for(var i = 0; i < this.arr.length; i++) {
this.arr[i].update();
}
}
}
var observe = {
add : function(subject) {
subject.attach(this);
subject.state = 3;
},
update : function () {
console.log('observe ' + subject.state);
}
}
var observe2 = {
add :function(subject) {
subject.attach(this);
},
update : function() {
console.log('observe2 ' + subject.state);
}
}
subject.setState(3);
This article is licensed under CC BY 4.0 by the author.
