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

时间:2013-03-27 09:45:55

标签: java design-patterns observer-pattern

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

3 个答案:

答案 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)

作为一般规则,请避免使用静态方法和字段。也就是说,如果您只能与实例成员共存,请执行此操作。静态成员是邪恶的,有时是必要的,但从不需要。