java - 实现 java.util.Observer 的类中的所有静态成员?

标签 java design-patterns observer-pattern

我想创建一个类R,它将观察类S的所有实例,也就是说,我正在使用观察者可观察模式。我确信没有必要拥有类 R 的多个实例。这就是为什么我将 R 的所有成员设置为静态的。但是,我不确定这是否是设计类(class)的正确方法。 Observablepublic void addObserver(Observer o) 方法需要一个对象而不是静态类。如果我创建一个 R 实例以便将其传递给 addObserver 可以吗?它是否以任何方式违反了 Observable-Observer 模式?

最佳答案

即使您不需要 R 的多个实例(现在),您也不必也不应该将 R 设计为仅包含静态成员。程序设计可能规定仅使用一个 R 实例。有些人甚至建议使用单例模式以编程方式强制执行。

The public void addObserver(Observer o) method of Observable needs an object and not a static class

短语静态类通常引用一个被声明为静态的内部类,以表明它可以在没有封闭的外部类实例的情况下存在。我认为您错误地使用了这个短语。

Is it okay if I create an instance of R only so that I can pass it to addObserver ?

是的,当然。仅仅因为您以所有成员都是静态的并因此属于该类(由类加载器加载)的方式声明了 R,并不意味着您可以不要根据需要构造和使用尽可能多的类实例。

Does it violate the Observable-Observer pattern in any way ?

只要R 实现了 Observer,就不会。事实上,同一个观察者观察多个可观察对象并不异常。

关于java - 实现 java.util.Observer 的类中的所有静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655772/

相关文章:

java - 页面包含带有 LayoutTransition (或 animateLayoutChanges ="true")的 ViewGroup,这会干扰滚动动画

java - 部署到应用程序引擎时出现 400 错误请求

java - 简单的 Java 程序越来越消耗内存

java - 如何禁用 javamail SSL 支持?

reactjs - Qt "passthrough"或 "container"小部件

java - 我应该有一个对象作为属性或原始 id 吗?

C++ 对象构造函数数组

ruby-on-rails - rails : How to access current controller in an Observer?

promise - 在 Angular 2 中为模拟数据创建 Observable

.net - 观察者模式与事件驱动模型有何不同?