JSFiddle - React, Tailwind, and code Playground

HTML

<!--Пример паттерна Observer Pub/Sub-->
<a href="http://blog.makushev.com/2015/08/03/observer-pub-sub-oop-pattern/" target="_blank">Описание паттерна Observer, Pub/Sub</a>

JavaScript

//Опишем объект "Издатель"
function Publisher(){
    //это просто массив для хранения всех подписчиков
    this.subscribers = [];
}

//Опишем метод, который позволит подписчикам, подписаться на издателя
//грубо говоря, любой желающий может пойти на почту и подписаться
//или как там это сейчас делается? :)
Publisher.prototype.subscribe = function(onPublish){
    this.subscribers.push(onPublish);
};

//Опишем метод, который будет вызываться, когда издатель издал новую новость
Publisher.prototype.publish = function(sometext){
    //пробегаем по всем подписчикам и отдаем ему текст новости
    this.subscribers.forEach(function(subscriber){
        subscriber(sometext);
    });
};


//Ну а теперь создадим два новых издательства
var freedom = new Publisher();
var union = new Publisher();

//Теперь Сашу, который всем обо всем рассказывает по каждому поводу
var Sasha = {
    tellToEveryone: function(news){
        console.log('OMG! Did you hear that ' + news);
    }
};

//Теперь Машу, которая обо всем пишет свои мысли в блог
var Masha = {
    writeToBlog: function(news){
        console.log('My opinions about ' + news);
    }
};

//Осуществим подписку Саши и Маши на газету Freedom

//строго говоря, мы могли бы написать вот так:
//freedom.subscribe(function(news){
//    Sasha.tellToEveryone(news);
//});

//но более аккуратной будет все же имеено такая запись:
freedom.subscribe(Sasha.tellToEveryone);
freedom.subscribe(Masha.writeToBlog);
//а Машу подпишем на журнал Union
union.subscribe(Masha.writeToBlog);

//а теперь Издательства публикуют свои новости
freedom.publish('The winter is coming!');
union.publish("It's snowball time!");