Coding With Fun
Home Docker Django Node.js Articles Python pip guide FAQ Policy

CoffeeScript Observer Mode


May 09, 2021 CoffeeScript


Table of contents


Observer mode

Problem

When an event occurs, you have to make an announcement to some objects.

Solution

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"

Discuss

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.