Post
KO

디자인 패턴 - 옵저버 패턴

옵저버패턴

한 객체의 상태가 바뀌면 그 객체를 의존하는 다른 객체에도 자동으로 갱신되는 방식으로 일대다(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.