观察者模式
Posted z8z87878
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式相关的知识,希望对你有一定的参考价值。
——拷打、折磨,毫无人性的酷刑,制服了他的身体,却没有征服他的意志。无论何时,他都坚持着自己的信念,那个他写在绝笔中的信念,那个崇高、光辉、唯一的信念:涟即身无完骨,尸供蛆蚁,原所甘心。但愿国家强固,圣德刚明,海内长享太平之福。此痴愚念头,至死不改。有人曾质问我,遍读史书如你,所见皆为帝王将相之家谱,有何意义?千年之下,可有一人,不求家财万贯,不求出将入相,不求青史留名,唯以天下、以国家、以百姓为任,甘受屈辱,甘受折磨,视死如归?我答:曾有一人,不求钱财,不求富贵,不求青史留名,有慨然雄浑之气,万刃加身不改之志。杨涟,千年之下,终究不朽!
嗯,缅怀一下古人(来自明朝那些事儿,有气节的人总是让人敬佩的).看下今天的观察者模式吧,观察者模式在应用中好像也经常使用吧.额,比如应用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("星期天补课!!"); //学校发通知
输出
小明妈妈手机收到短信 : 星期天补课!!
小华妈妈手机收到短信 : 星期天补课!!
观察者模式差不多就这样了,不观察的时候就注销,也挺好理解吧
以上是关于观察者模式的主要内容,如果未能解决你的问题,请参考以下文章