【问题标题】:Making a subclass observable in java在java中使子类可观察
【发布时间】:2016-03-08 04:08:47
【问题描述】:

我有一个名为 Passenger 的子类,它是从 Person 类扩展而来的。我想让乘客类成为一个可观察的对象。所以我是这样做的,

class Person extends Observable{    
}

class Passenger extends Person{
    public void move(){
        setChanged();
        notifyObservers();
    }   
}

class Manager implements Observer{
    @Override
    public void update(Observable o, Object arg) {
    }  
}

当我不需要该类的可观察功能时,将 Person 类设为 Observable 是一种不好的做法吗?如果是这样,我该如何更改?

【问题讨论】:

  • 如果您需要从 Person 扩展乘客,则没有其他方法可以实现您正在做的事情;)
  • 如果你想“让Passenger类成为一个可观察的对象”,为什么不让Passenger扩展Observable呢?
  • 因为它需要扩展人
  • 我同意 TangledUpInBlue(答案如下)。将 Person 设置为接口似乎是合理的。然后你可以制作两个抽象类; BasePerson 和 BaseObservablePerson 根据需要进行扩展。

标签: java observer-pattern


【解决方案1】:

我认为 java 中的 Obervable 类是一个经过深思熟虑的类。在我看来,它真的很想在界面中。

但是,您可以在乘客级别使用组合,而不是让 Person 从 Observable 扩展。

在您的Passenger 类中,您可以编写如下代码:

private Observable observable = new Observable();

public void addObserver(Observer o) {
    observable.addObserver(o);
}

public void notifyObservers() {
    observable.notifyObservers();
}

这是与可观察对象的组合关系。它应该工作得很好。

这个问题的更多信息:

Why is java.util.Observable not an abstract class?

【讨论】:

    【解决方案2】:

    你也可以让 Person 类成为一个接口,这样Passenger 类就可以扩展 Observable 并实现 Person。只是一个想法。

    【讨论】:

      猜你喜欢
      • 2011-11-08
      • 1970-01-01
      • 2012-09-02
      • 2020-08-30
      • 2023-01-10
      • 2014-07-22
      • 2015-08-11
      • 2023-03-11
      • 2015-03-13
      相关资源
      最近更新 更多