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