如何在构造函数中添加观察者?
How the observer is added in the constructor?
public static void main(String[] args) {
WeatherData subject =new WeatherData();
new ShowEstadistics(subject);
}
public class WeatherData implements Subject {
ArrayList<Observer> observers;
public WeatherData() {
observers = new ArrayList();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
}
public class ShowEstadistics implements Observer{
WeatherData weatherdata;
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}
不知道这部分的subject是怎么注册observer的:
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}
因为我将 registerObserver 方法应用于天气数据,但出于某种原因,它也在主题中注册。不知道为什么。
请有人解释一下。
假设您有这样的代码场景:
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);
你认为在这种情况下 y 的值是多少?它是一个包含 5 的整数对象吗?
答案是 Integer Object Containing 2.
当我们说 Integer x=new Integer(4)
时,我们的意思是 x 指向内存中的一个地址,该地址有一个包含值 4 的对象。类似地,对于 y,y 指向内存中的一个地址,它有一个包含值 5 的对象。
然后写 y=x
表示我们删除了指向包含 5 的对象的地址的指针,并将其指向 x 指向的当前值 5 的对象。包含 5 的对象的地址没有任何指向它的变量不再,因此,您不能调用或修改它的值。 x=new Integer(2)
将 x 和 y 指向的地址对象更改为值为 2 的对象后,调用这些变量中的任何一个都将 return 相同的对象(因为它们具有相同的引用)。
现在这是一个基于 Integer
对象类型的基本示例,但可以应用于任何更复杂的对象。
public static void main(String[] args) {
WeatherData subject =new WeatherData();
new ShowEstadistics(subject);
}
public class WeatherData implements Subject {
ArrayList<Observer> observers;
public WeatherData() {
observers = new ArrayList();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
}
public class ShowEstadistics implements Observer{
WeatherData weatherdata;
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}
不知道这部分的subject是怎么注册observer的:
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}
因为我将 registerObserver 方法应用于天气数据,但出于某种原因,它也在主题中注册。不知道为什么。
请有人解释一下。
假设您有这样的代码场景:
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);
你认为在这种情况下 y 的值是多少?它是一个包含 5 的整数对象吗? 答案是 Integer Object Containing 2.
当我们说 Integer x=new Integer(4)
时,我们的意思是 x 指向内存中的一个地址,该地址有一个包含值 4 的对象。类似地,对于 y,y 指向内存中的一个地址,它有一个包含值 5 的对象。
然后写 y=x
表示我们删除了指向包含 5 的对象的地址的指针,并将其指向 x 指向的当前值 5 的对象。包含 5 的对象的地址没有任何指向它的变量不再,因此,您不能调用或修改它的值。 x=new Integer(2)
将 x 和 y 指向的地址对象更改为值为 2 的对象后,调用这些变量中的任何一个都将 return 相同的对象(因为它们具有相同的引用)。
现在这是一个基于 Integer
对象类型的基本示例,但可以应用于任何更复杂的对象。