设计模式之观察者模式详解

观察者模式又称为发布-订阅模式,涉及的角色有:

  ●  抽象主题

  ●  具体主题

  ●  抽象观察者

  ●  具体观察者

案例演示:公司发放工资的时候通知所有观察者工资已发放。

/**
 * 抽象观察者
 */
public interface IWatcher {

    public void getNotice(String str);
}
/**
 * 抽象主题:工资接口
 */
public interface ISalary {

    public void addWatcher(IWatcher watcher);

    public void removeWatcher(IWatcher watcher);

    public void notifyAll(String str);
}
/**
 * 具体观察者:员工
 */
public class Emp implements IWatcher {

    @Override
    public void getNotice(String str) {

        System.out.println("员工" + str);
    }

}
/**
 * 具体观察者:经理
 */
public class Manager implements IWatcher {

    @Override
    public void getNotice(String str) {

        System.out.println("经理" + str);
    }

}
/**
 * 具体主题:工资
 */
public class Salary implements ISalary {

    //存放观察者:员工
    private List<IWatcher> watcherList = new ArrayList<IWatcher>();

    @Override
    public void addWatcher(IWatcher watcher) {
        watcherList.add(watcher);

    }

    @Override
    public void removeWatcher(IWatcher watcher) {
        watcherList.remove(watcher);

    }

    @Override
    public void notifyAll(String str) {
        for (IWatcher watcher: watcherList) {
            watcher.getNotice(str);
        }
    }
}
/**
 * 测试类
 */
public class Test {

    public static void main(String[] args) {

        //工资
        ISalary salary = new Salary();
        //员工
        IWatcher emp = new Emp();
        //经理
        IWatcher manager = new Manager();

        //添加观察者
        salary.addWatcher(emp);
        salary.addWatcher(manager);

        salary.notifyAll("发工资了!");
    }
}

测试结果如下:

时间: 2024-11-07 17:21:55

设计模式之观察者模式详解的相关文章

android设计模式之观察者模式详解

背景:有一个叫什么四人帮的:美国四个it大牛:我也不认识:总结出了23中设计模式:针对编程中的问题解决方案: 解决问题:当目标或数据发生变化时:观察者(界面)要显示通知: 观察者模式: 概念:一个对象发生改变时,所有信赖于它的对象自动做相应改变. 我在这里举一个西游记的例子: 被观察者:唐僧: 观察者:悟空:沙僧:八戒: 妖怪: 当师父唐僧被妖怪抓走时:观察者:悟空:沙僧:八戒:就会发现:并作出响应: 再举一个程序中的例子: 我们查询数据库并且用listview显示:而当数据库中的内容发生改变时

Java设计模式----观察者模式详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3899208.html 联系方式:[email protected] [正文] 一.观察者模式的定义: 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象.这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新.例如:GUI中的事件

jQuery的观察者模式详解 转载

jQuery的观察者模式详解 投稿:hebedich 本文主要是介绍了jQuery中on方法及trigger方法,以及围绕这个方法来体验的观察者模式,是篇非常不错的文章,对我们理解观察者模式很有帮助. undefined undefined ■ on方法绑定内置事件,自然触发 比如,我们给页面的body元素绑定一个click事件,这样写. <head> <meta http-equiv="Content-Type" content="text/html; c

热门前沿知识相关面试问题-MVC/MVP/MVVM架构设计模式面试问题详解

MVC: MVC的定义:M:业务逻辑处理.[业务MODEL]V:处理数据显示的部分.[如xml布局文件]C:Activity处理用户交互的问题.[也就是Activity在MVC中扮演着C的角色] MVC的特点:①.耦合性低.②.可扩展性好.③.模块职责划分明确. MVC的实例详解: 总结:①.利用MVC设计模式,使得项目有了很好的可扩展和维护性.②.controller(控制器)是一个中间桥梁的作用.③.什么时候适合使用MVC模式呢?当一个项目很小, MVP: MVVM: 原文地址:https:

设计模式面试题详解

请写出您熟悉的几种设计模式,并做简单介绍. 答: 工厂设计模式:程序在接口和子类之间加入了一个过渡端,通过此过渡端可以动态取得 实现了共同接口的子类实例化对象. 代理设计模式:指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而 代理主题负责其他相关业务的处理.比如生活中的通过代理访问网络,客户通过网络代 理连接网络(具体业务),由代理服务器完成用户权限和访问限制等与上网相关的其他操 作(相关业务) 适配器模式:如果一个类要实现一个具有很多抽象方法的接口,但是本身只需要实现接 口中的部

(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)决了当时的问题,那时LZ接触JAVA刚几个月,比葫芦画瓢的用了观察者模式。

本章我们讨论一个除前面的单例以及代理模式之外,一个WEB项目中有可能用到的设计模式,即观察者模式. 说起观察者模式,LZ还是非常激动的,当初这算是第一个让LZ感受到设计模式强大的家伙.当初LZ要做一个小型WEB项目,要上传给服务器文件,一个需求就是要显示上传进度,LZ就是用这个模式解决了当时的问题,那时LZ接触JAVA刚几个月,比葫芦画瓢的用了观察者模式. 现在谈及观察者模式,能用到的地方就相对较多了,通常意义上如果一个对象状态的改变需要通知很多对这个对象关注的一系列对象,就可以使用观察者模式.

观察者模式详解

SplSubject 和 SplObserver 接口 Observer 设计模式定义了对象间的一种一对多的依赖关系,当被观察的对象发生改变时,所有依赖于它的对象都会得到通知并被自动更新,而且被观察的对象和观察者之间是松耦合的.在该模式中,有目标(Subject)和观察者(Observer)两种角色.目标角色是被观察的对象,持有并控制着某种状态,可以被任意多个观察者作为观察的目标,SPL 中使用 SplSubject接口规范了该角色的行为: 表 1. SplSubject 接口中的方法 方法声明

java观察者模式详解

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新. 观察者模式的结构 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-收听者(Source/Listener)模式或从属者(Dependents)模式. 本模式的类图结构如下: 图1.观察者模式的静态结构

Java设计模式(一) 之 详解单例模式

1.前言 单例模式可能是设计模式中相对比较简单的而且在工作中应用最频繁的设计模式了,例如系统配置文件的读取工具类要求得保证其实例唯一性.再比如在需要调用计算机底层时,需要一个Java来使用JNI来与其他语言进行交互,此时可能需要保证Java类的实例是唯一的. 那么在编写单例模式时,需要考虑哪些问题呢? 2.简单实现: 常规单例模式实现的原则: 1.实例变量私有化: 2.构造方法私有化: 3.提供静态的基于类的方法放回实例: 遵循这三个原则,可以在最单纯的环境下设计出单例模式.单例模式的最简单实现