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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值