观察者模式
2016-07-01 00:16
183 查看
——拷打、折磨,毫无人性的酷刑,制服了他的身体,却没有征服他的意志。无论何时,他都坚持着自己的信念,那个他写在绝笔中的信念,那个崇高、光辉、唯一的信念:涟即身无完骨,尸供蛆蚁,原所甘心。但愿国家强固,圣德刚明,海内长享太平之福。此痴愚念头,至死不改。有人曾质问我,遍读史书如你,所见皆为帝王将相之家谱,有何意义?千年之下,可有一人,不求家财万贯,不求出将入相,不求青史留名,唯以天下、以国家、以百姓为任,甘受屈辱,甘受折磨,视死如归?我答:曾有一人,不求钱财,不求富贵,不求青史留名,有慨然雄浑之气,万刃加身不改之志。杨涟,千年之下,终究不朽!
嗯,缅怀一下古人(来自明朝那些事儿,有气节的人总是让人敬佩的).看下今天的观察者模式吧,观察者模式在应用中好像也经常使用吧.额,比如应用APP商城下载东西的时候,APP详情页和APP应用页下载进度要同步,这需要观察者,群聊也可以用到观察者模式等.先来看张图片
![](http://img.blog.csdn.net/20160701000127991)
观察者模式是一个被观察对象,多个观察者,观察者观察对象需要注册对象,注册后不观察的话需要反注册,即注销,我们在这举个例子说明下.现在小学生去上学报道的时候,要填写家长的手机号码,用来接收平时一些学校的通知,布置作业监督做作业之类的东西,这里面,学校或者班级就是一个被观察的对象,学生的家长就是观察者,报道登记号码,就是注册.等你毕业了或离开那个班级了,就是反注册,注销.嗯,大概就是这样,我们来看看具体实现例子,首选来看看观察者是什么样子
然后,我们来实例化两个观察者,即家长
接着,我们来看看我们被观察的对象学校
好了,接着来测试一把
输出
观察者模式差不多就这样了,不观察的时候就注销,也挺好理解吧
嗯,缅怀一下古人(来自明朝那些事儿,有气节的人总是让人敬佩的).看下今天的观察者模式吧,观察者模式在应用中好像也经常使用吧.额,比如应用APP商城下载东西的时候,APP详情页和APP应用页下载进度要同步,这需要观察者,群聊也可以用到观察者模式等.先来看张图片
观察者模式是一个被观察对象,多个观察者,观察者观察对象需要注册对象,注册后不观察的话需要反注册,即注销,我们在这举个例子说明下.现在小学生去上学报道的时候,要填写家长的手机号码,用来接收平时一些学校的通知,布置作业监督做作业之类的东西,这里面,学校或者班级就是一个被观察的对象,学生的家长就是观察者,报道登记号码,就是注册.等你毕业了或离开那个班级了,就是反注册,注销.嗯,大概就是这样,我们来看看具体实现例子,首选来看看观察者是什么样子
public interface Observer { //观察者 void updata(String msg); //自由发挥想象 }
然后,我们来实例化两个观察者,即家长
public class XiaoMingObserver implements Observer{ //小明他妈妈 @Override public void updata(String msg) { // TODO Auto-generated method stub System.out.println("小明妈妈手机收到短信 : "+msg); } } public class XiaoHuaObserver implements Observer{ //小华他妈妈 @Override public void updata(String msg) { // TODO Auto-generated method stub System.out.println("小华妈妈手机收到短信 : "+msg); } }
接着,我们来看看我们被观察的对象学校
public class Subject { //被观察对象,我们这简单点不需要复用.不把它写成抽象类或接口 //用来管理观察这个对象的观察者 ArrayList<Observer> observerList = new ArrayList<Observer>(); //注册观察者,观察需要注册 public void registerObserVer(Observer observer){ observerList.add(observer); } //注销观察者,观察者不观察了 public void unRegisterObserver(Observer observer){ observerList.remove(observer); } //通知观察者,对象发生了什么变化 public void notifyObserver(String str){ for (Observer ob : observerList) { ob.updata(str); // } } }
好了,接着来测试一把
public class main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Subject subject = new Subject(); subject.registerObserVer(new XiaoMingObserver()); //小明入学注册 subject.registerObserVer(new XiaoHuaObserver()); //小华入学注册 subject.notifyObserver("星期天补课!!"); //学校发通知 } }
输出
小明妈妈手机收到短信 : 星期天补课!! 小华妈妈手机收到短信 : 星期天补课!!
观察者模式差不多就这样了,不观察的时候就注销,也挺好理解吧
相关文章推荐
- Application对象做网站计数器
- AlarmManager 简介
- 自定义Loading大全之SwapLoading
- 导出数据在代码中加载-骨骼动画在cocos中加载
- 软件架构、鸡窝、软件架构师
- Android漂亮的UI库集合
- Zigbee Z‐STACK协议栈和TinyOS
- spring boot 学习笔记(007)pom.xml修改
- Fastjson 简明教程
- 手机号码归属地查询代码
- Centos7安装RocketMQ及配置测试
- 超融合架构真的完美吗?
- linux中service与chkconfig的替代者systemctl的简单介绍
- sqlserver行列转换
- object-c的代码例子
- 【GOF23设计模式】_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构JAVA248
- (数据类型-Number直接量前的“-”)JavaScript权威指南笔记4.2
- 关联
- Python.Module.site
- Codeforces 474 D Flowers