如何为对象创建自定义操作?

时间:2009-09-25 13:56:43

标签: java

我有一个对象,让我们说FOO,带有变量,百分比......

我需要创建一个Action percentChanged,它将在变量percent更改时触发,该变量将由另一个对象中的ActionListener处理...

如何在java中完成?

3 个答案:

答案 0 :(得分:3)

为什么不使用PropertyChangeListener。这就是Java bean的工作方式。

答案 1 :(得分:2)

我认为你需要Observer Pattern

结帐ObservableObserver

答案 2 :(得分:2)

ActionListener接口只有actionPerformed方法,因此您可以通过创建自己的侦听器接口并让Foo类通知已注册的侦听器来实现您要完成的任务。

例如,可以创建一个名为PercentChangeListener的新接口:

interface PercentChangeListener {
  public void percentChanged();
}

然后,Foo类可以设置注册PercentChangeListener的方法,当百分比发生变化时应该通知这些方法:

class Foo {
  // Percentage.
  private Percent percent;

  // Listeners which should be notified of a change to the percentage.
  private List<PercentageChangeListener> listeners;

  // Adds a listener that should be notified.
  public void addListener(PercentageChangeListener listener) {
    listener.add(listener);
  }

  // Notifies all the listeners which should be told that the percentage
  // has changed.
  private void notifyListeners() {
    for (PercentageChangeListener listener : listeners) {
      listener.percentChanged();
    }
  }

  // Some process which changes the percentage.
  private void someProcess() {
    percent.change();
    notifyListeners();
  }
}

然后,任何应该通知Foo百分比变化的对象应该实现PercentChangeListener或者有一个处理它的处理程序:

class ClassThatHandlesFoo {

  public void someMethod() {
    Foo f = new Foo();
    f.addPercentageChangeListener(this);
  }

  public void percentChanged() {
    // Perform action when percent of "Foo f" has changed.
  }
}

以上是未经测试的代码,但应该对可以采取的方法有所了解。