CoffeeScript 觀察者模式

2022-06-29 17:15 更新

觀察者模式

問題

當(dāng)一個事件發(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)。為了通報(bào)發(fā)布新的周期性可觀察對象的事件,應(yīng)該對 PostOffice進(jìn)行訂閱。每一個被訂閱的對象都存儲在PostOffice的內(nèi)部訂閱數(shù)組中。當(dāng)新的實(shí)體周期發(fā)布時每一個訂閱者都會收到通知。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號