Java 如何观察可观测类的性质
我有以下课程Java 如何观察可观测类的性质,java,design-patterns,observer-pattern,Java,Design Patterns,Observer Pattern,我有以下课程 public class A extends java.util.Observable { private B property1; private C property2; int variable1; /*Setters and getters**/ } 我将这个类设置为可观察的,这样就可以通知我变量1中的任何更改。现在我想知道类型B或C的属性中变量的变化。因为属性B和C的变量没有从类A中的setter方法中改变,所以当发生变化时,我不能通知观察者 通知观察者而不在观察者代
public class A extends java.util.Observable {
private B property1;
private C property2;
int variable1;
/*Setters and getters**/
}
我将这个类设置为可观察的,这样就可以通知我变量1中的任何更改。现在我想知道类型B或C的属性中变量的变化。因为属性B和C的变量没有从类A中的setter方法中改变,所以当发生变化时,我不能通知观察者
通知观察者而不在观察者代码中显式注册B类和C类的最佳方式是什么?我只想观察属于类A的所有属性。当您的可观察的
状态更改时,调用其中一个方法。setter方法可能不会显式地修改它们,但是如果您已经正确地访问了B
和C
对象,那么您就可以开始了
不过,在我听来,似乎允许对B
和C
的引用继续存在于类A
对象之外。这样做的结果是,您的系统现在取决于类A
的实现,而不是它的接口。通过以下方式解决此问题:
B
和C
,并且必须通过classA处理所有问题
- 关于为什么应该这样做,而不是允许其他类直接获取
和B
的引用C
B
和C
也扩展可观察
,并在更改时更新A
代码示例
public class A extends java.util.Observable {
private B property1;
private C property2;
int variable1;
public void doThatThingy() {
property1.doSomething();
notifyObservers();
}
}
public class B {
void doSomething() {
// Hey look at me, I'm doing something
}
}
不做
我不知道当可观察状态发生变化时我如何理解。例如,客户端将使用getter方法获取property1中的访问权限,然后他们将使用其setter和getter修改内部字段。@Stefanos自从我第一次写这篇文章以来,我对它进行了显著的编辑。代码示例收入非常感谢您现在我明白您的意思:-)
public B getB() {
return property1;
}