我对制作人/消费者设计模式有疑问,实际上我的情况是:我有一个类产生多种类型的消息(通知)和多个使用这些消息的消费者。
复杂的是我的制作人制作不同类型的消息,我的消费者会消费这些消息。
那么这种情况的最佳实施是什么?生产者/消费者设计模式是这种情况的最佳解决方案吗?
答案 0 :(得分:0)
我认为这里有两个独立的问题。一个是获得一个“消息”对象。这是一个生产者/消费者问题,但如果你想要可靠性,你需要考虑各种问题,如线程,恢复等。如果你真的在多台机器之间做这件事,那就帮自己一个忙,并使用像JMS这样的现有框架。 / p>
与此分开处理不同类型的消息的问题。通常你会有一些消息的类型层次结构,它们都会对一个共同的“消息”祖先进行子类型化。我不确定你的消息的语义,但是命令模式的某些东西可能是合适的。
您真的需要更多地澄清您的问题,以便我们能够提供更好的建议。
答案 1 :(得分:0)
鉴于您觉得您正在编写制作人和消费者,我会说使用产品/消费者模式是个好主意。由于存在许多类型的消息,可能最好使用“拉”数据模型(让消费者询问消息,而不是让每个消费者获得每条消息)。以下是可能有所帮助的大纲:
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.
}
}