如何在构造函数中添加观察者?

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 对象类型的基本示例,但可以应用于任何更复杂的对象。