http://objectclub.jp/technicaldoc/pattern/observer
http://gamehell.g.hatena.ne.jp/kenmo/20050715/p1
observerパターンは相互の依存加関係を、一方向の依存関係2つに分割している?
ovserverパターンが適用されていないこのコードを……、
class subject constructor(@num):->@list=[] add:(o)->@list.push o notify:->@list.forEach (o)->o.update(@) getNum->@num addNum:-> @num++; @notify() # ↓↑ お互い依存している class observer constructor:(targetSubject) targetSubject.add @ update(targetSubject):-> console.log targetSubject.getNum()
ovserverパターンを適用すると、こうなる。
class subject constructor:->@list=[] add:(o)->@list.push o notify:->@list.forEach (o)->o.update(@) # ↓ subjectはobserverに依存しているが、その逆は無い class observer update:(target)-> class concreteSubject extends subject constructor(@num):->super() getNum->@num addNum:-> @num++ @notify() # ↑ concreteObserverはconcreteSubjectに依存しているがその逆は無い class concreteObserver extends observer constructor:(targetSubject) targetSubject.add @ update(targetSubject)-> console.log targetSubject.getNum()