觀察者模式和事件總線都是發(fā)布訂閱模型乡翅。
兩者主要差別在于他們的拓?fù)浣Y(jié)構(gòu)。
觀察者模式罪郊,觀察的關(guān)系是一對(duì)一的蠕蚜。 拓?fù)浣Y(jié)構(gòu) 是網(wǎng)形的
事件總線引入中間對(duì)象, 讓被觀察者只依賴事件總線悔橄,觀察者也只依賴事件總線靶累,他的拓?fù)浣Y(jié)構(gòu)為星形
事件總線解決觀察者模式的一個(gè)問題:當(dāng)觀察對(duì)象增多時(shí),對(duì)象間的觀察關(guān)系指數(shù)增加癣疟,而事件總線的觀察關(guān)系是線性增加了挣柬,極大降低復(fù)雜度。
第二點(diǎn)睛挚, 如果被觀察者與觀察者都是動(dòng)態(tài)創(chuàng)建的邪蛔,那么維護(hù)關(guān)系的生命周期也是個(gè)大問題。
可以清晰知道扎狱,觀察者模式有時(shí)粒度太細(xì)侧到, 事件總線有時(shí)粒度太大,所以委乌,我們還可以引入局部范圍內(nèi)的事件總線床牧,靈活運(yùn)用。
編程過程中的種種設(shè)計(jì)模式遭贸,本質(zhì)是業(yè)務(wù)邏輯中靜態(tài)部分與動(dòng)態(tài)部分的管理。