需要解决的问题:
由于对象的某些状态发生了变化,而要通知其他与此状态有关联的对象进行更新。
具体事例:
当我对设置的姓名以及密码(观察对象)进行更改时,希望有关由此保密信息的其他对象(观察者)感知到,进而进行更新处理或者其他业务处理。
具体实施步骤:
1、注册需要对象观察的信息。(本例即姓名以及密码)
2、实现于此信息相关的对象的接收方法。(本例即姓名密码更改后,需要更新的对象)
代码模板:
需要感知的对象。
对象更改后,需要更新的第一个观察者。
对象更改后,需要更新的第二个观察者。
测试代码:
执行结果:
第一个观察者:知道改变了名称:FIRST NAME
第二个观察者:知道改变了名称:FIRST NAME
第一个观察者:知道改变了密码:FIRST PASSWORD
第二个观察者:知道改变了密码:FIRST PASSWORD
第一个观察者:知道改变了名称:SECOND NAME
第二个观察者:知道改变了名称:SECOND NAME
第一个观察者:知道改变了密码:SECOND PASSWORD
第二个观察者:知道改变了密码:SECOND PASSWORD
说明:
Observer(观察者)模式,顾名思义,就是需要改变的对象似乎是一个旁观者,当我发现我关心的对象改变时,我自己也要做相应的调整。
实际应用生活中的例子就比如:
生产的香烟的成本变动了,商店销售的此种品牌的香烟价格也要做相应的调整。
水涨船高,其实水就是观察对象,船就成了观察者(实际生活中传不变是不成立的,程序设计中可就要自己考虑了)。
希望不吝指教,谢谢。
由于对象的某些状态发生了变化,而要通知其他与此状态有关联的对象进行更新。
具体事例:
当我对设置的姓名以及密码(观察对象)进行更改时,希望有关由此保密信息的其他对象(观察者)感知到,进而进行更新处理或者其他业务处理。
具体实施步骤:
1、注册需要对象观察的信息。(本例即姓名以及密码)
2、实现于此信息相关的对象的接收方法。(本例即姓名密码更改后,需要更新的对象)
代码模板:
需要感知的对象。
import java.util.Observable;
public class MyObservable extends Observable {
private String name;
private String password;
public void setName(String name) {
this.name = name;
super.setChanged();
super.notifyObservers("名称:"+name);
}
public void setPassword(String password) {
this.password = password;
super.setChanged();
super.notifyObservers("密码:"+password);
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
对象更改后,需要更新的第一个观察者。
import java.util.Observable;
import java.util.Observer;
public class MyFirObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("第一个观察者:知道改变了" + arg);
}
}
对象更改后,需要更新的第二个观察者。
import java.util.Observable;
import java.util.Observer;
public class MySedObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("第二个观察者:知道改变了" + arg);
}
}
测试代码:
public class Test {
public static void main(String[] args) {
MyObservable observable = new MyObservable();
Observer fir = new MyFirObserver();
Observer sed = new MySedObserver();
observable.addObserver(sed);
observable.addObserver(fir);
observable.setName("FIRST NAME");
observable.setPassword("FIRST PASSWORD");
observable.setName("SECOND NAME");
observable.setPassword("SECOND PASSWORD");
}
}
执行结果:
第一个观察者:知道改变了名称:FIRST NAME
第二个观察者:知道改变了名称:FIRST NAME
第一个观察者:知道改变了密码:FIRST PASSWORD
第二个观察者:知道改变了密码:FIRST PASSWORD
第一个观察者:知道改变了名称:SECOND NAME
第二个观察者:知道改变了名称:SECOND NAME
第一个观察者:知道改变了密码:SECOND PASSWORD
第二个观察者:知道改变了密码:SECOND PASSWORD
说明:
Observer(观察者)模式,顾名思义,就是需要改变的对象似乎是一个旁观者,当我发现我关心的对象改变时,我自己也要做相应的调整。
实际应用生活中的例子就比如:
生产的香烟的成本变动了,商店销售的此种品牌的香烟价格也要做相应的调整。
水涨船高,其实水就是观察对象,船就成了观察者(实际生活中传不变是不成立的,程序设计中可就要自己考虑了)。
希望不吝指教,谢谢。