May 09, 2021 CoffeeScript
When an event occurs, you have to make an announcement to some objects.
Use 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"
Here you have an observer object (PostOffice) and an observable object (Magazine Subscriber, Newspaper Subscriber). P ostOffice should be subscribed to in order to communicate events that publish new periodic observables. E ach subscribed object is stored in PostOffice's internal subscription array. Each subscriber is notified when a new entity cycle is published.