23种设计模式(8):观察者模式-java开发java经验技巧

23种设计模式(8):观察者模式-java开发java经验技巧

ID:30748674

大小:93.00 KB

页数:4页

时间:2019-01-03

23种设计模式(8):观察者模式-java开发java经验技巧_第1页
23种设计模式(8):观察者模式-java开发java经验技巧_第2页
23种设计模式(8):观察者模式-java开发java经验技巧_第3页
23种设计模式(8):观察者模式-java开发java经验技巧_第4页
资源描述:

《23种设计模式(8):观察者模式-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、23种设计模式(8):观察者模式-编程开发技术23种设计模式(8):观察者模式原文出处:卡奴达摩的专栏定义:定义对象间一-种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并口动更新。类型:行为类模式类图:在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它和关的对象也耍随之做岀相应的变化。比如,我们耍设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单;再比如,我们要设计一个自动部署的功能,就像Eclipse开发时,只要修改了文件,eclipse就会自动

2、将修改的文件部署到服务器屮。这两个功能有一个相似的地方,那就是一个对象要时刻监听着另一个对象,只要它的状态一发生改变,口己随Z要做出和应的行动。其实,能够实现这一点的方案很多,但是,无疑使用观察者模式是一个主流的选择。观察者模式的结构在最基础的观察者模式屮,包括以下四个角色:•被观察者:从类图中町以看到,类中有一个用來存放观察者对彖的Vector•容器(Z所以使用Vector而不使用List,是因为多线程操作时,Vector在是安全的,而List则是不安全的),这个Vector容器是被观察者类的核心,另外还有三个方法:at

3、tach方法是向这个容器中添加观察者对象;detach方法是从容器中移除观察者对象;notify方法是依次调用观察者对彖的对应方法。这个角色可以是接口,也口J以是抽彖类或者具休的类,因为很多情况卜-会与具他的模式混用,所以使用抽象类的情况比较多。•观察者:观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化吋,这个方法就会被触发调用。•具体的被观察者:使用这个角色是为了便于扩展,可以在此介色中定义具体的业务逻辑。•具体的观察者:观察者接口的貝体实现,在这个角色中,将定义被观察者对象状态发生变化时所要

4、处理的逻辑。观察者模式代码实现abstractclassSubject{privateVectorobs=newVector();publievoidaddObserver(Observerobs){this.obs.add(obs);}publicvoiddelObserver(Observerobs){this.obs.remove(obs);}protectedvoidnotifyObserver(){for(Observero:obs){o.update();}}public

5、abstractvoiddoSomethingO;}classConcreteSubjectextendsSubject{publicvoiddoSomething(){System,out.println(〃被观察者事件反生〃);this・notifyObserver();}}interfaceObserver{publicvoidupdate();}classConcreteObserver1implementsObserver{publicvoidupdate(){System,out.printin(z,观察者1收

6、到信息,并进行处理。〃);classConcrete0bserver2implementsObserver{publicvoidupdate(){System,out.printin(z,观察者2收到信息,并进行处理。〃);}}publicclassClient{publicstaticvoidmain(String[]args){Subjectsub二newConcreteSubject();sub.addObserver(newConcreteObserver1());//添加观察者1sub.addObserver(n

7、ewConcrcte0bscrvcr2());//添加观察者2sub.doSomething();}}运行结果被观察者事件反生观察者1收到信息,并进行处理。观察者2收到信息,并进行处理。通过运行结果可以看到,我们只调用了Subject的方法,但同时两个观察者的相关方法都被同时调用了。仔细看一下代码,其实很简单,无非就是在Subject类中关联一卜Observer类,并且在doSomething方法中遍历一卜Observer的update方法就彳亍了。观察者模式的优点观察者与被观察者之间是属于轻度的关联关系,并II是抽象耦合

8、的,这样,对于两者来说都比较容易进行扩展。观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理。但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比较多的吋候,性能问题是比较令人担忧的。并且,在链式结构屮,比较容易出现循环引用的错误,造成系统假死。总结java语言中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。