在对象更改时执行方法 (OOP)



我正在学习OOP并尝试编写一个简单的程序,该程序将在每次特定变量更改时执行某些方法。 我有两个类:

public class SomeClass {
private OtherClass object;
public OtherClass getObject() {
return this.object;
}
public void setObject(OtherClass object) {
objectChanged();
this.object = object;
}
private void objectChanged() {
System.out.println("Object has changed");
}
}

public class OtherClass {
private int value = 5;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}

每次更改变量"对象"时,都应调用变量对象更改。我的第一个天真的想法是将方法调用放在 set 函数中。但是,如果在设置对象后更改对象怎么办?喜欢这个:

SomeClass someObject = new SomeClass();
OtherClass otherObject = new OtherClass();
someObject.setObject(otherObject); //"Object has changed"
otherObject.setValue(10); //nothing happens yet

我需要某个对象来实现存储在其中的对象将其值更改为 10,但我该怎么做?在 OOP 中甚至可能吗?

这看起来很合理,但应该考虑很多事情。这就是为什么通常没有自动方法可以做到这一点的原因。它本身不是 OOP 范式的一部分。如果这是一些自动行为,则会导致巨大的开销,因为通常不需要以这种方式观察更改。但是,当然,您可以根据自己的具体要求以自己的方式实施。

至少有两种方法。

在 MVVM(如 WPF(中,有一个INotifyPropertyChanged接口(我们称之为模式(,您可以使用它自己触发通知,就像您对SomeClass所做的那样。但是,当您嵌套对象时,您需要将该 mechanism.to 级联连接起来:您应该对OtherClass执行相同的操作,并连接实际实例以冒泡更改。 请参阅:https://rehansaeed.com/tag/design-patterns/

另一个选项是Observable模式。每次对象更改状态时,您都会发出一个实例 - 当前实例。但是,您应该注意发出不可变的对象。至少通过使用使其只读的接口。但是您仍然需要连接对象树以响应嵌套对象的更改。

如果您的平台支持反射,并且您创建了一个适当的工具集,则可以使此连接非常简单。但同样:这与范式没有严格关系。

最新更新