我想创建一个类R
来观察 class 的所有实例S
,也就是说,我正在使用观察者可观察模式。没有必要拥有多个 class 实例R
,我确信这一点。这就是为什么我将所有成员R
设为静态的原因。但是,我不确定这是否是设计课程的正确方法。的public void addObserver(Observer o)
方法Observable
需要一个对象而不是静态类。如果我创建一个R
only 的实例以便我可以将它传递给 ,可以addObserver
吗?它是否以任何方式违反了 Observable-Observer 模式?
3 回答
即使您不需要R
(现在)的多个实例,您也不必也不应该设计R
为仅由static
成员组成。程序设计可以规定只使用一个R
. 有些人甚至会建议使用单例模式以编程方式强制执行它。
Observable 的 public void addObserver(Observer o) 方法需要一个对象而不是静态类
该短语static class
通常引用一个声明为静态的内部类,以表明它可以在没有封闭的外部类实例的情况下存在。我认为您错误地使用了这个短语。
如果我只创建一个 R 实例以便我可以将它传递给 addObserver 可以吗?
是的,当然。仅仅因为您R
以这样一种方式声明了所有成员都是static
并因此属于该类(由 ClassLoader 加载),并不意味着您不能构造和使用任意数量的类实例。
它是否以任何方式违反了 Observable-Observer 模式?
只要R implements Observer
,不。事实上,同一个观察者观察多个可观察者并没有异常。
作为一般规则,避免使用静态方法和字段。也就是说,如果您只能与实例成员一起生活,请这样做。静态成员是邪恶的,有时是必要的,但从不想要。
不,不违反。谁知道将来你可能会有其他观察者。您仍然可以拥有由非静态方法更新的静态字段。因此静态字段的状态由所有实例共享。(单态模式)