Как реализовать одного производителя, несколько потребителей и несколько объектов в Java? - PullRequest
0 голосов
/ 25 июня 2010

У меня есть вопрос о шаблоне проектирования «производитель / потребитель», фактически моя ситуация такова: у меня есть один класс, который создает несколько типов сообщений (уведомлений) и несколько потребителей, которые используют эти сообщения.

Сложность заключается в том, что мой производитель создает разные типы сообщений, и мои потребители потребляют эти сообщения.

Так, какова лучшая реализация этой ситуации? Является ли дизайн-шаблон «производитель / потребитель» лучшим решением в этой ситуации?

Ответы [ 2 ]

0 голосов
/ 19 мая 2011

Учитывая, что звучит так, будто вы кодируете как производителя, так и потребителя, я бы сказал, что было бы неплохо использовать шаблон «продукт / потребитель». Поскольку существует много типов сообщений, возможно, было бы лучше использовать модель данных «тянуть» (попросить потребителей запрашивать сообщения, а не заставлять каждого потребителя получать каждое сообщение). Вот схема, которая может помочь:

public interface BrokerProducer
{
    public void addConsumer(BrokerConsumer consumer);        
    public void removeConsumer(BrokerConsumer consumer);

    public Price getPrices();
    public Report getReport();
}

public interface BrokerConsumer
{
    public void update(BrokerProducer brokerProducer);
}

public class Broker implements BrokerProducer
{
    private Collection<BrokerConsumer> consumer = new HashSet<BrokerConsumer>();

    // Implement the interface

    // Notify all consumers- there are messages ready.
    public void notifyConsumers()
    {
        for(BrokerConsumer consumer : consumers)
            consumer.update(this);
    }       
}

public class PricesConsumer implements BrokerConsumer
{
    @Override
    public void update(BorkerProducer producer)
    {
        Prices prices = producer.getPrices();
        // Do something with the prices.
    }
}
0 голосов
/ 25 июня 2010

Я думаю, что здесь есть две независимые проблемы. Один из них - это объект сообщения. Это проблема производителя / потребителя, хотя, если вы хотите надёжности, вам нужно рассмотреть множество вопросов, таких как многопоточность, восстановление и т. Д. Если вы действительно делаете это между несколькими компьютерами, сделайте себе одолжение и используйте существующую среду, такую ​​как JMS. 1001 *

Отдельно от этого стоит проблема обработки разных типов сообщений. Обычно у вас есть некоторая иерархия типов сообщений, которые все подтипируют общего предшественника «Сообщения». Я не уверен в семантике вашего сообщения, но что-то в соответствии с шаблоном команды могло бы подойти.

Вам действительно нужно уточнить ваш вопрос, чтобы мы могли предоставить вам лучший совет.

...