java-android设计模式学习笔记(2):观察者模式-编程开发技术

java-android设计模式学习笔记(2):观察者模式-编程开发技术

ID:30775799

大小:159.19 KB

页数:12页

时间:2019-01-03

java-android设计模式学习笔记(2):观察者模式-编程开发技术_第1页
java-android设计模式学习笔记(2):观察者模式-编程开发技术_第2页
java-android设计模式学习笔记(2):观察者模式-编程开发技术_第3页
java-android设计模式学习笔记(2):观察者模式-编程开发技术_第4页
java-android设计模式学习笔记(2):观察者模式-编程开发技术_第5页
资源描述:

《java-android设计模式学习笔记(2):观察者模式-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java/android设计模式学习笔记(2):观察者模式-编程开发技术java/android设计模式学习笔记(2):观察者模式原文出处:Shawn_Dut这篇来讲一下观察者模式,观察者模式在实际项目屮使用的也是非常频繁的,它最常用的地方是GUI系统、订阅——发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具冇易变性,尤其是前期随着业务的改变或者产品的需求修改,应用界面也经常性变化,但是业务逻辑基本变化不大,此时,GUI系

2、统需耍一套机制来应对这种情况,使得U1层与具体的业务逻辑解耦,观察者模式此时就派上用场了。PS:对技术感兴趣的同鞋加群544645972-起交流。设计模式总目录java/android设计模式学习笔记目录特点观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新。它实现了Subject和Observer之间的松耦合,Subject只知道观察者实现了Observer接口,主题不需要知道具体的类是谁、做了些什么或其他任何细节。任何时候我们都可以

3、增加新的观察者。因为主题唯一依赖的东西是一个实现Observer接口的对象列表,所以我们可以随时增加观察者,同样的,也可以在任何时候删除观察者,当然更不用去关心观察者的类型,只要实现了Observer接口即可,Subject最后只会发通知给实现了Observer接口的观察者oSubject和Observer之间实现松耦合Z后,双方代码的修改都不会影响到另外一方,当然前提是双方得遵守接口的规范(接口隔离原则)。观察者模式使用的场景:•关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合"关

4、系;•事件多级触发场景;•跨系统的消息交换场景,如消息队列、事件总线的处理机制。EventBus框架就是一个使用观察者模式的典型例子。UML类图c-IObserver+update(Objectobject)AI+update(Objectobject)+registerObserwr(IObserverobserver):void+removeObserver(IObserverobserver):void+hotifyObserver(Objectobject):voidAConcreteS

5、ubject+registerObserwr(IObserverobserver):void+removeObserver(IObserverobserver):void+notifyObserver(Objectobject):void观察者模式的uml类图如上图所示,一般基本由4个角色构成•Subject:抽象主题,也就是被观察的角色,抽彖主题把所有观察者对彖的引用保存在一个集合里,每个主题都可以冇任意数虽的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。•ConcreteSubje

6、ct:具体主题,该角色将有关状态存入具体观察者对象,在具体主题的内部状态发牛改变时,给所有注册过的观察者发出通知,具体主题角色对象乂叫做具体被观察者角色。•Observer:抽象观察者,该角色是观察者的抽象类,它定义了一个更新接口,使得在得到主题的更改通知时更新口己。•ConcreteObserver:具体的观察者,该对象实现抽象观察者介色所定义的更新接口,以便在主题的状态变化时更新ti身的状态。有几点需要注意的是1.Subject和Observer是一个一对多的关系,也就是说观察者貝要实现Ob

7、server接口并把自己注册到Subject小就能够接收到消息事件;2.JavaAPI有内置的观察者模式类:java.util.Observable类和java.util.Observer接口,这分别对应着Subject和Observer的角色;3.使川JavaAPI的观察者模式类,需要注意的是被观察者在调川notifyObservers()函数通知观察者之询一定要调用setChanged()函数,要不然观察者无法接到通知;4.使用JavaAPI的缺点也很明显,由于Observable是一个类,

8、java只允许单继承的缺点就导致你如果同吋想要获取另一个父类的加性吋,你只能选择适配器模式或者是内部类的方式,而且山于setChanged()函数为protected属性,所以你除非继承Observable类,否则你根本无法使用该类的属性,这也违背了设计模式的原则:多用组合,少用继承。示例与源码观察者模式行法有很多利1,只要遵循将被观察者和观察者解耦思想的方法都是可以的,列举三种我在开发中常见的方法,以firstmoduel作为secondmodulel和secondmodule2的父modul

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

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

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