设计方式学习笔记——Observer模式(行为)
设计模式学习笔记——Observer模式(行为)
需要解决的问题:
由于对象的某些状态发生了变化,而要通知其他与此状态有关联的对象进行更新。
具体事例:
当我对设置的姓名以及密码(观察对象)进行更改时,希望有关由此保密信息的其他对象(观察者)感知到,进而进行更新处理或者其他业务处理。
具体实施步骤:
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(观察者)模式,顾名思义,就是需要改变的对象似乎是一个旁观者,当我发现我关心的对象改变时,我自己也要做相应的调整。
实际应用生活中的例子就比如:
生产的香烟的成本变动了,商店销售的此种品牌的香烟价格也要做相应的调整。
水涨船高,其实水就是观察对象,船就成了观察者(实际生活中传不变是不成立的,程序设计中可就要自己考虑了)。
希望不吝指教,谢谢。