我需要将Observer设计模式用于学校项目,但我遇到了问题。 我有一个计时器和一个减少自身的int,我想创建一个观察者,所以当int变为0时,会弹出一个jdialog。
这是我的代码:
public class Joc extends JPanel implements ActionListener {
javax.swing.Timer t1;
int time=0,
MyObservator obs = new MyObservator();
public Joc()
{ ... // constructor stuff
t1=new javax.swing.Timer(1000, (ActionListener) this);
t1.start();}
public void actionPerformed(ActionEvent e) {
if(time>0) {time--;}
else {}
}
//我的观察者班级
public class MyObservator implements Observer{
Joc joc;
MyJDialog dialog;
@Override
public void update(Observable o, Object arg) {
if(joc.time==0)
{dialog.setVisible(true);}
}
}
我不明白如何使用观察者,如何添加观察者以及如何使其发挥作用?
答案 0 :(得分:3)
使用观察者模式,您可以从观察者的基本界面开始。当特定事件发生时,观察者通知方法将被其他类调用。
public interface IObserver {
public void notify(int i);
}
现在界面需要实现:
public class Observer implements IObserver {
@Override
public void notify(int i) {
if(i % 1000 == 0){
System.out.println("One thousand iterations elapsed.");
}
}
}
观察者需要观察一些事物。因此创建了一个包含IObservers
列表的类。请注意,IObserver
可以添加到Observable
包含的列表中。如果需要,可以在接口中指定addObserver
方法,然后由Observable
实现。另请注意,Observable
类在发生特定事件时调用notify
方法。 IObserver
会收到有关这些事件的通知,并可在发生时执行任何操作。在我们的示例中,如果int
为1000,我们会在控制台上打印一些文本。
public class Observable {
private List<IObserver> observers = new ArrayList<IObserver>();
public void addObserver(IObserver observer){
this.observers.add(observer);
}
public void execute(){
for(int i = 0; i < 10000; i++){
for(IObserver observer: observers){
observer.notify(i);
}
}
}
}
在程序中,我们使用IObserver
实例注册实现Observable
的实例。
public static void main(String[] args) {
Observable observable = new Observable();
observable.addObserver(new Observer());
observable.execute();
}
在您的示例中,Joc
类等同于Obserable
类。它应包含Observer
的列表,并在通过update
方法发生特定事件时通知他们。