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);
}
我不知道观察者如何在此部分的主题中注册:
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}
因为我对天气数据应用了registerObserver方法,但是由于某种原因,它也在主题中注册。我不知道为什么。
请有人给我解释。
答案 0 :(得分:-1)
假设您具有以下代码方案:
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);
在这种情况下,您认为y的值是什么?它是一个包含5的整数对象吗? 答案是包含2的整数对象。
当我们说Integer x=new Integer(4)
时,是指x指向内存中的一个地址,该地址的对象值为4。类似地,对于y,y指向内存中的一个地址,该地址为值为5的对象。
然后写y=x
表示我们删除了指针,该指针指向对象包含5的地址,并将其指向x指向的对象,该对象当前是值5的对象。包含5的对象的地址没有指向它的任何变量不再,因此,您不能调用或修改其值。用x=new Integer(2)
将x和y指向的地址对象更改为值为2的对象后,调用这些变量中的任何一个都将返回相同的对象(因为它们具有相同的引用)。
现在,这是一个基于Integer
对象类型的基本示例,但是可以应用于任何更复杂的对象。