java设计模式--观察者模式
2017-08-31 15:12
405 查看
观察者模式:概念自行百度;
使用步骤(java提供接口):
被观察者(目标:一方):继承Observable类,在目标提醒变量的set方法中调用notifyObservers方法:此方法可以调
用两个中任意一个,并且与观察者update方法参数对应,①notifyObservers(object arg)推模式直接把需要的内容
推送过去②notifyObservers()拉模式,默认把自己整个对象推送过去,观察者根据需要自己通过对象(目标对象)
获取.
注意:在调用notifyObservers方法之前,必须先调用this.setChanged()方法,此方法通知观察者目标(目标本身)发
生了变化,还有notifyObservers方法对应观察者类的update(Observable o, Object arg)方法;
被观察者(目标)代码:
public class ConcreteWeatherSubject extends Observable{
private String weathercontent;
public String getWeathercontent() {
return weathercontent;
}
public void setWeathercontent(String weathercontent) {
this.weathercontent = weathercontent;
this.setChanged();//此方法必须调用
// this.notifyObservers();
this.notifyObservers(weathercontent);
}
}
观察者(多方):实现Observer接口,重写update(Observable o, Object arg)方法(第一个参数为目标调用用
notifyObservers(object arg)时对应的目标本身对象为拉模式,第二个参数为目标调用notifyObservers()时目标
主动推送的内容为推模式)
观察者代码:
public class ConcreteObserver implements Observer{
private String observername;
public String getObservername() {
return observername;
}
public void setObservername(String observername) {
this.observername = observername;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(observername+"收到了:"+arg);
// System.out.println(observername+"收到了:"+((ConcreteWeatherSubject)
o).getWeathercontent());
}
}
测试类:注意观察者需要注册,需要被观察者调用addObserver()方法
public class Test {
public static void main(String[] args) {
ConcreteWeatherSubject subject = new ConcreteWeatherSubject();
ConcreteObserver observer1 = new ConcreteObserver();
observer1.setObservername("张三");
ConcreteObserver observer2 = new ConcreteObserver();
observer2.setObservername("李四");
subject.addObserver(observer1);//注册观察者对象
subject.addObserver(observer2);//注册观察者对象
subject.setWeathercontent("天气预报:天气晴朗,艳阳高照!!");
}
}
推模式:目标主动把观察者需要的数据推送给它;
拉模式:目标把自己本身对象推送给观察者,由观察者自己取所需数据
第一次写文章,纯属个人理解,还请多多指教!!
使用步骤(java提供接口):
被观察者(目标:一方):继承Observable类,在目标提醒变量的set方法中调用notifyObservers方法:此方法可以调
用两个中任意一个,并且与观察者update方法参数对应,①notifyObservers(object arg)推模式直接把需要的内容
推送过去②notifyObservers()拉模式,默认把自己整个对象推送过去,观察者根据需要自己通过对象(目标对象)
获取.
注意:在调用notifyObservers方法之前,必须先调用this.setChanged()方法,此方法通知观察者目标(目标本身)发
生了变化,还有notifyObservers方法对应观察者类的update(Observable o, Object arg)方法;
被观察者(目标)代码:
public class ConcreteWeatherSubject extends Observable{
private String weathercontent;
public String getWeathercontent() {
return weathercontent;
}
public void setWeathercontent(String weathercontent) {
this.weathercontent = weathercontent;
this.setChanged();//此方法必须调用
// this.notifyObservers();
this.notifyObservers(weathercontent);
}
}
观察者(多方):实现Observer接口,重写update(Observable o, Object arg)方法(第一个参数为目标调用用
notifyObservers(object arg)时对应的目标本身对象为拉模式,第二个参数为目标调用notifyObservers()时目标
主动推送的内容为推模式)
观察者代码:
public class ConcreteObserver implements Observer{
private String observername;
public String getObservername() {
return observername;
}
public void setObservername(String observername) {
this.observername = observername;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(observername+"收到了:"+arg);
// System.out.println(observername+"收到了:"+((ConcreteWeatherSubject)
o).getWeathercontent());
}
}
测试类:注意观察者需要注册,需要被观察者调用addObserver()方法
public class Test {
public static void main(String[] args) {
ConcreteWeatherSubject subject = new ConcreteWeatherSubject();
ConcreteObserver observer1 = new ConcreteObserver();
observer1.setObservername("张三");
ConcreteObserver observer2 = new ConcreteObserver();
observer2.setObservername("李四");
subject.addObserver(observer1);//注册观察者对象
subject.addObserver(observer2);//注册观察者对象
subject.setWeathercontent("天气预报:天气晴朗,艳阳高照!!");
}
}
推模式:目标主动把观察者需要的数据推送给它;
拉模式:目标把自己本身对象推送给观察者,由观察者自己取所需数据
第一次写文章,纯属个人理解,还请多多指教!!
相关文章推荐
- Java 设计模式 (2) 观察者模式
- Java设计模式之观察者
- Java-马士兵设计模式学习笔记-观察者模式-OOD 线程 改进
- java设计模式--观察者模式
- JAVA设计模式—观察者模式和Reactor反应堆模式
- Java技术常用设计模式(五)--- 观察者模式
- Java 设计模式 之 观察者模式
- Java设计模式-------观察者模式
- [2014-10-28]JAVA笔记_设计模式之观察者模式(Observer)
- java设计模式:观察者模式(Observer)
- Java开发中的23种设计模式详解----观察者模式(Observer)
- 浅谈Java设计模式(十五)观察者模式(Observer)
- java设计模式观察者模式
- Java设计模式之观察者模式
- 设计模式--观察者模式初探和java Observable模式
- java设计模式--观察者模式
- java设计模式之观察者模式
- java设计模式之观察者模式
- Java设计模式之观察者模式
- Java设计模式---观察者模式