當一個事件發(fā)生時你不得不向一些對象發(fā)布公告。
使用觀察者模式(Observer Pattern)。
class PostOffice
constructor: () ->
@subscribers = []
notifyNewItemReleased: (item) ->
subscriber.callback(item) for subscriber in @subscribers when subscriber.item is item
subscribe: (to, onNewItemReleased) ->
@subscribers.push {'item':to, 'callback':onNewItemReleased}
class MagazineSubscriber
onNewMagazine: (item) ->
alert "I've got new "+item
class NewspaperSubscriber
onNewNewspaper: (item) ->
alert "I've got new "+item
postOffice = new PostOffice()
sub1 = new MagazineSubscriber()
sub2 = new NewspaperSubscriber()
postOffice.subscribe "Mens Health", sub1.onNewMagazine
postOffice.subscribe "Times", sub2.onNewNewspaper
postOffice.notifyNewItemReleased "Times"
postOffice.notifyNewItemReleased "Mens Health"
這里你有一個觀察者對象( PostOffice )和可觀察對象( MagazineSubscriber, NewspaperSubscriber )。為了通報發(fā)布新的周期性可觀察對象的事件,應該對 PostOffice 進行訂閱。每一個被訂閱的對象都存儲在 PostOffice 的內部訂閱數(shù)組中。當新的實體周期發(fā)布時每一個訂閱者都會收到通知。