设计模式(七)之观察者模式

被观察者接口:

public interface IMonitorSubject {

    public void addListener(IMonitorListener listener);

    public void notifyListener(JobCtrl implJobCtrl);
}

观察者接口:

public interface IMonitorListener {
    public void statistical(JobCtrl implJobCtrl);
}

被观察者实现:

public class JobSubject implements IMonitorSubject {
    private final CopyOnWriteArraySet<IMonitorListener> monitorListener = new CopyOnWriteArraySet<>();

    @Override
    public void addListener(IMonitorListener listener) {
        monitorListener.add(listener);
    }

    @Override
    public void notifyListener(JobCtrl implJobCtrl) {
        for (IMonitorListener listener : monitorListener) {
            try {
                listener.statistical(implJobCtrl);
            } catch (Exception e) {
                Log.e("statistic jobs error.");
                Log.e(e);
            }
        }
    }
}

观察者实现:

public class JobListener implements IMonitorListener {
    private JobListener() {
    }

    static class SingletonHolder {
        static JobListener instance = new JobListener();
    }

    public static JobListener getInstance() {
        return SingletonHolder.instance;
    }

    @Override
    public void statistical(JobCtrl implJobCtrl) {
        //do some things.
    }
}

调用者:

public class JobMonitor{
    private IMonitorSubject subject = new JobSubject();
    private JobCtrl implJobCtrl= new JobCtrl();
    public JobMonitor(){
        subject.addListener(JobListener.getInstance());
    }

    @Override
    public static void main(String[] args) {
        Log.i("JobMonitorBuilder start[schedule]-----");
        subject.notifyListener(implJobCtrl);
        Log.i("JobMonitorBuilder end[schedule]-----");
        return null;
    }
}
时间: 2024-09-27 19:41:24

设计模式(七)之观察者模式的相关文章

学习php设计模式 php实现观察者模式(Observer)_php技巧

一.意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新[GOF95] 又称为发布-订阅(Publish-Subscribe)模式.模型-视图(Model-View)模式.源-监听(Source-Listener)模式.或从属者(Dependents)模式二.观察者模式结构图   三.观察者模式中主要角色抽象主题(Subject)角色:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者.抽象主题提供了增加和删除观

设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

设计模式 ( 十五 ) 观察者模式Observer(对象行为型)    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改.也许,你只想根据你的具体应用环境而改进通信代码.或者,你只想简单的重新构造通信代码来避免类和类之间的相互依赖与相互从属. 2.问题 当一个对象的状态发生改变时,你

设计模式学习笔记(七)—Observer观察者模式

<设计模式>一书对Observer是这样描述的: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新. 举个例子,在现实生活中,父母与孩子是最亲密的人.父母做为孩子(被观察者)的监护人(观察者),当孩子和别人打架后,一定会告诉他的父母这件事(呵呵,当孩子很小时,通常会告诉父母,长大了以后,可能不会,这里的孩子指的是小孩子),当孩子获得奖学金后,也一定会告诉他的父母.下面我用Observer实现这个程序.代码如下: import java.ut

设计模式之三:观察者模式

观察者模式 目录介绍 1.观察者模式介绍 2.观察者使用场景 3.观察者UML图解 4.观察者模式简单实现 4.0 举个例子 4.1 观察者代码 4.2 被观察者代码 4.3 测试代码 4.4 思考 5.观察者模式Android源码分析 5.1 先来看看源代码 5.2 观察者从哪里来的,查看setAdapter源代码 5.3 观察者在哪里创建的呢?如何运作 5.4 代码分析 6.观察者模式深入探索 7.EventBus事件总线 7.1 遇到的问题 7.2 目前流行事件总线框架 7.3 源码解读,

.NET中的设计模式五:观察者模式

设计 观察者模式(Observer)完美的将观察者和被观察的对象分离开.举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上.面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面.一个对象只做一件事情,并且将他做好.观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性. 观察者模式有很多实现方式,从根本上说,该模式必须包含两个角色:观察者和被观察对象.在刚才的例子中,业务数据是被观察对象,

【设计模式系列】--观察者模式

在前面的博文中,小编介绍设计模式中的撩妹模式,不知道小伙伴们有没有从中get到技巧呢?今天这篇博文,咱们继续来学习设计模式的相关知识,今天小编向大家介绍的模式是观察者模式,还请小伙伴多多指教,小编会从什么是原型观察者模式.观察者模式的结构图.观察者模式的demo以及观察者模式的特点和应用场景等方面一一进行介绍,希望对有需要的小伙伴有帮助.      什么是观察者模式? 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Lis

iOS应用开发中使用设计模式中的观察者模式的实例_IOS

在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,即便就如iOS开发中与我们打交道最多的无非就是单例模式.观察者模式和工厂模式了,当然了其他的设置模式也同样存在在编程的很多地方.下面就就让我们简单的了解下观察者模式吧! 观察者模式本质上时一种发布-订阅模型,用以消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同时它们也可以被复用于其他地方Observer从Subject订阅通知,ConcreteObserver实现重现ObServer并将其重载其updat

深入解析Java设计模式编程中观察者模式的运用_java

定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新.类型:行为类模式类图: 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出相应的变化.比如,我们要设计一个右键菜单的功能,只要在软件的有效区域内点击鼠标右键,就会弹出一个菜单:再比如,我们要设计一个自动部署的功能,就像eclipse开发时,只要修改了文件,eclipse就会自动将修改的文件部署到服务器中.这两个功能有一个相似的地方,那就是一个对象要时

用Java设计模式中的观察者模式开发微信公众号的例子_java

还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行盗窃的时候,总有一两个人在门口把风--如果有什么风吹草动,则会立即通知里面的同伙紧急撤退.也许放风的人并不一定认识里面的每一个同伙:而在里面也许有新来的小弟不认识这个放风的.但是这没什么,这个影响不了他们之间的通讯,因为他们之间有早已商定好的暗号. 呵呵,上面提到的放风者.偷窃者之间的关系就是观察者模式在现实中的活生生的例子. 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式.GOF给观察者模式如下

设计模式(二):自己动手使用“观察者模式”实现通知机制

在之前发布Objective-C系列博客的时候,其中提到过OC的通知机制,请参考<Objective-C中的老板是这样发通知的(Notification)>这篇博客.在之前关于Notification的博客中,只介绍了Foundation框架中的通知的使用方式.正如前面博客中提到的那样,通知是"一对多的关系",类似于广播.一个人发通知,多个人接收.这也就是设计模式中的"观察者模式".接收者的一方是Observer(观察者),而发送方是Subject(主题