设计方式学习笔记——Observer模式(行为)

设计模式学习笔记——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(观察者)模式,顾名思义,就是需要改变的对象似乎是一个旁观者,当我发现我关心的对象改变时,我自己也要做相应的调整。
实际应用生活中的例子就比如:
生产的香烟的成本变动了,商店销售的此种品牌的香烟价格也要做相应的调整。
水涨船高,其实水就是观察对象,船就成了观察者(实际生活中传不变是不成立的,程序设计中可就要自己考虑了)。
希望不吝指教,谢谢。