2014/7/21 观察者模式
来源:互联网 发布:约会吧是什么软件 编辑:程序博客网 时间:2024/05/29 15:08
一:观察者模式例子
附上源码:
类图参见书p268:
IHanFeiZi.java
package observePattern2;//被观察者接口public interface IHanFeiZi {public void haveBreakfast();public void haveFun();}
Observable.java
package observePattern2;//被观察者接口public interface Observable {public void addObserver(Observer observer);//增加一个观察者public void deleteObserver(Observer observer);//删除一个观察者public void notifyObservers(String context);}
HanFeiZi.java
package observePattern2;import java.util.ArrayList;public class HanFeiZi implements IHanFeiZi,Observable{//实现IHanFeiZi接口中的方法public void haveBreakfast() {System.out.println("韩非子:开始吃饭了");this.notifyObservers("韩非子在吃饭");//通知所有的观察者}public void haveFun() {System.out.println("韩非子:开始娱乐了");this.notifyObservers("韩非子在娱乐");}private ArrayList<Observer> observerList = new ArrayList<Observer>();public void addObserver(Observer observer) {// TODO Auto-generated method stubthis.observerList.add(observer);}public void deleteObserver(Observer observer) {// TODO Auto-generated method stubthis.observerList.remove(observer);}public void notifyObservers(String context) {// TODO Auto-generated method stubfor(Observer observer : observerList)observer.update(context);}}
Observer.java
package observePattern2;public interface Observer {public void update(String context);}
LiSi.java
package observePattern2;public class LiSi implements Observer{ //实现Observer接口中的方法public void update(String context) {System.out.println("李斯:观察到韩非子活动,开始向老板汇报了");this.reportToQinShiHuang(context);System.out.println("李斯:汇报完毕\n");}private void reportToQinShiHuang(String reportContext){System.out.println("李斯:报告,秦老板!韩非子有行动了--->"+reportContext);}}
WangSi.java
package observePattern2;public class WangSi implements Observer{public void update(String context) {System.out.println("王斯:观察到韩非子活动,开始向老板汇报了");this.reportToQinShiHuang(context);System.out.println("王斯:汇报完毕\n");}private void reportToQinShiHuang(String reportContext){System.out.println("王斯:报告,秦老板!韩非子有行动了--->"+reportContext);}}
Client.java
package observePattern2;public class Client {public static void main(String[] args){Observer lisi = new LiSi();Observer wangsi = new WangSi();HanFeiZi hanFeiZi = new HanFeiZi();hanFeiZi.addObserver(lisi);hanFeiZi.addObserver(wangsi);hanFeiZi.haveBreakfast();}}
二:观察者模式的定义
模式中的角色名称
1.Subject被观察者:必须的3个方法是增加,删除,通知观察者
2.Observer观察者:观察者从被观察者那里接受到消息后,进行update操作
3.ConcreteSubject具体被观察者:
4.ConcreteObserver具体观察者:
模板源码如下:
Subject.java
package observePattern;import java.util.Vector;//被观察者public abstract class Subject{//观察者数组private Vector<Observer> obsVector = new Vector<Observer>();public void addObserver(Observer o){this.obsVector.add(o);}public void delObserver(Observer o){this.obsVector.remove(o);}public void notifyObservers(){for(Observer o : this.obsVector){o.update();}}}
ConcreteSubject.java
package observePattern;//具体的被观察者public class ConcreteSubject extends Subject{public void doSomething(){//业务处理super.notifyObservers();}}
Observer.java
package observePattern;//观察者public interface Observer{public void update();}
ConcreteObserver.java
package observePattern;public class ConcreteObserver implements Observer{public void update() {System.out.println("接受到消息,进行处理");}}
Client.java
package observePattern;public class Client {public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();Observer obs = new ConcreteObserver();subject.addObserver(obs);subject.doSomething();}}
0 0
- 2014/7/21 观察者模式
- tomcat 7 观察者模式
- 7、观察者模式
- 设计模式(7)---->观察者模式
- 设计模式(7)——观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- HDOJ 2007 平方和与立方和
- Qt数据库sqlite总结
- Makefile经典教程(掌握这些足够)
- Python selenium 学习笔记
- 安装邮件服务器之四
- 2014/7/21 观察者模式
- 安装邮件服务器之五
- Log4j 日志详细用法
- 输出文件夹内所有文件后缀
- 水平消隐和垂直消隐 复核消隐信号
- 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
- Objective-C block实现代码分析
- OC特有语法
- 现阶段要解决的问题