Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个观察者对多个主题的正确设计模式_Java_Oop_Design Patterns_Observer Pattern - Fatal编程技术网

Java 一个观察者对多个主题的正确设计模式

Java 一个观察者对多个主题的正确设计模式,java,oop,design-patterns,observer-pattern,Java,Oop,Design Patterns,Observer Pattern,在观察者模式中,主体和观察者之间通常存在一对多的关系(有一个主体和多个观察者) 但我有一个问题,在我的实现中,有许多主题(例如:a,B,C)是返回对象,但只有一个观察者(例如:O)将这些主题的输出放入队列并逐个处理它们 我可以使用什么样的设计模式/范例?如果需要使用队列,可以使用生产者/消费者模式 观察者模式的不同之处在于,观察者通常知道可观察对象。而在生产者/消费者模式中,观察对象(对象、信息、事件的生产者)和观察者(消费者)是完全解耦的。 无论有多少(甚至没有)生产商在场,消费者都不会受到影

在观察者模式中,主体和观察者之间通常存在一对多的关系(有一个主体和多个观察者)

但我有一个问题,在我的实现中,有许多主题(例如:a,B,C)是返回对象,但只有一个观察者(例如:O)将这些主题的输出放入队列并逐个处理它们


我可以使用什么样的设计模式/范例?

如果需要使用队列,可以使用生产者/消费者模式

观察者模式的不同之处在于,观察者通常知道可观察对象。而在生产者/消费者模式中,观察对象(对象、信息、事件的生产者)和观察者(消费者)是完全解耦的。 无论有多少(甚至没有)生产商在场,消费者都不会受到影响

当然,另一个区别是,消费者必须主动轮询队列


此模式的“挑战”是访问两端队列时的正确同步。当然也有一些库可以处理这个问题。

如果需要使用队列,可以使用生产者/消费者模式

观察者模式的不同之处在于,观察者通常知道可观察对象。而在生产者/消费者模式中,观察对象(对象、信息、事件的生产者)和观察者(消费者)是完全解耦的。 无论有多少(甚至没有)生产商在场,消费者都不会受到影响

当然,另一个区别是,消费者必须主动轮询队列


此模式的“挑战”是访问两端队列时的正确同步。但是当然有一些库来处理这个问题。

嗨,Jonny,是的,它涵盖了我98%的问题,除了在observer中实现que之外。也许是一种反应式编程解决方案,其中主体发出事件流,而observer将它们合并到一个统一的流中。我偏爱,但也有其他反应库。很抱歉这么简短的评论,我没有时间写一个合适的答案。我会查一查约翰。你的评论很有价值,尽管它很短。嗨,Jonny,是的,它涵盖了我问题的98%,除了observer中的que实现。也许是一种反应式编程解决方案,其中主体发出事件流,而observer将它们合并到一个统一的流中。我偏爱,但也有其他反应库。很抱歉这么简短的评论,我没有时间写一个合适的答案。我会查一查约翰。你的评论很有价值,虽然很短。你好,沃尔夫,我想这就是我要找的。我发现BlockingQueue也是一个很好的例子。谢谢嗨,狼,我想这就是我要找的那个。我发现BlockingQueue也是一个很好的例子。谢谢