Sök…


Publicera-prenumerera i Java

Förlagsabonnenten är ett välkänt koncept med tanke på ökningen av YouTube, Facebook och andra sociala mediatjänster. Det grundläggande konceptet är att det finns en Publisher som genererar innehåll och en Subscriber som konsumerar innehåll. När Publisher genererar innehåll, meddelas varje Subscriber . Subscribers kan teoretiskt prenumereras på mer än en förläggare.

Vanligtvis finns det en ContentServer som sitter mellan utgivare och prenumerant för att hjälpa mediera meddelandet

public class Publisher {
    ...
    public Publisher(Topic t) {
        this.topic = t;
    }

    public void publish(Message m) {
        ContentServer.getInstance().sendMessage(this.topic, m);
    }
}

public class ContentServer {
    private Hashtable<Topic, List<Subscriber>> subscriberLists;

    private static ContentServer serverInstance;

    public static ContentServer getInstance() {
        if (serverInstance == null) {
            serverInstance = new ContentServer();
        }
        return serverInstance;
    }

    private ContentServer() {
        this.subscriberLists = new Hashtable<>();
    }
    
    public sendMessage(Topic t, Message m) {
        List<Subscriber> subs = subscriberLists.get(t);
        for (Subscriber s : subs) {
            s.receivedMessage(t, m);
        }
    }

    public void registerSubscriber(Subscriber s, Topic t) {
        subscriberLists.get(t).add(s);
    }

public class Subscriber {
    public Subscriber(Topic...topics) {
        for (Topic t : topics) {
            ContentServer.getInstance().registerSubscriber(this, t);
        }
    }
    
    public void receivedMessage(Topic t, Message m) {
        switch(t) {
            ...
        }
    }
}

Vanligtvis implementeras designmönstret för pub-sub med tanke på en flertrådad vy. En av de vanligare implementeringarna ser varje Subscriber som en separat tråd, där ContentServer hanterar en ContentServer

Enkelt pub-sub-exempel i JavaScript

Förlag och prenumeranter behöver inte känna varandra. De kommunicerar helt enkelt med hjälp av meddelandeköer.

(function () {
        var data;

        setTimeout(function () {
            data = 10;
            $(document).trigger("myCustomEvent");
        }, 2000);

        $(document).on("myCustomEvent", function () {
            console.log(data);
        });
})();

Här publicerade vi en anpassad händelse med namnet myCustomEvent och prenumererade på den händelsen. Så de behöver inte känna varandra.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow