gpt4 book ai didi

java - 观察者设计不起作用

转载 作者:行者123 更新时间:2023-12-01 18:30:37 24 4
gpt4 key购买 nike

我正在尝试用 Java 实现观察者模式。

我有类PlannerView extends Observer,它具有以下嵌套类

public class TitleInformer extends Observable {
private String title = "";

public void SetTitle(String s) {
title = s;
this.notifyObservers();
}
}

当我构造 PlannerView 类时,我像这样初始化可观察对象

public PlannerView(ProjectController projectController) {

titleInformer = new TitleInformer();
titleInformer.addObserver(this);
}

现在,我将可观察的 titleInformer 传递给我在 PlannerView 类中创建的另一个对象

actionView = new ActionView (titleInformer);

另一个类actionView,现在具有像这样引用的可观察对象

public ActionView(TitleInformer ti) {
this.titleInformer = ti;
}

以这种方式调用可观察对象的方法

titleInformer.SetTitle("New Project");

但是回到嵌套 Observable 所在的 PlannerView 中,最后一个方法不会被调用

public void update(Observable o, Object arg) {
System.out.println(1);
}

为什么?

最佳答案

您必须在通知观察者之前表明已进行更改。

public void SetTitle(String s) {
title = s;
this.setChanged(); // first
this.notifyObservers();
}

作为notifyObservers()方法 javadoc 声明

If this object has changed, as indicated by the hasChanged method, then notify all of its observers and then call the clearChanged method to indicate that this object has no longer changed.

hasChanged 属性由 setChanged 设置方法。

关于java - 观察者设计不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com