观察者模式

——拷打、折磨,毫无人性的酷刑,制服了他的身体,却没有征服他的意志。无论何时,他都坚持着自己的信念,那个他写在绝笔中的信念,那个崇高、光辉、唯一的信念:涟即身无完骨,尸供蛆蚁,原所甘心。但愿国家强固,圣德刚明,海内长享太平之福。此痴愚念头,至死不改。有人曾质问我,遍读史书如你,所见皆为帝王将相之家谱,有何意义?千年之下,可有一人,不求家财万贯,不求出将入相,不求青史留名,唯以天下、以国家、以百姓为任,甘受屈辱,甘受折磨,视死如归?我答:曾有一人,不求钱财,不求富贵,不求青史留名,有慨然雄浑之气,万刃加身不改之志。杨涟,千年之下,终究不朽!

嗯,缅怀一下古人(来自明朝那些事儿,有气节的人总是让人敬佩的).看下今天的观察者模式吧,观察者模式在应用中好像也经常使用吧.额,比如应用APP商城下载东西的时候,APP详情页和APP应用页下载进度要同步,这需要观察者,群聊也可以用到观察者模式等.先来看张图片
yuanli
观察者模式是一个被观察对象,多个观察者,观察者观察对象需要注册对象,注册后不观察的话需要反注册,即注销,我们在这举个例子说明下.现在小学生去上学报道的时候,要填写家长的手机号码,用来接收平时一些学校的通知,布置作业监督做作业之类的东西,这里面,学校或者班级就是一个被观察的对象,学生的家长就是观察者,报道登记号码,就是注册.等你毕业了或离开那个班级了,就是反注册,注销.嗯,大概就是这样,我们来看看具体实现例子,首选来看看观察者是什么样子

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("星期天补课!!"); //学校发通知
    }

}

输出

小明妈妈手机收到短信  :   星期天补课!!
小华妈妈手机收到短信  :   星期天补课!!

观察者模式差不多就这样了,不观察的时候就注销,也挺好理解吧

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值