适配器模式之观察者模式

设计模式目录
http://blog.csdn.net/fenglailea/article/details/52733435
风.fox

观察者模式

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新

通用类图

组成

  • 被观察者 Subject
    定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。他一般是抽象类或者实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者
  • 观察者 Observer
    观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理
  • 具体的被观察者 ConcreteSubject
    定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知
  • 具体的观察者 ConcreteObserver
    每个观察者在接收到消息后的处理反应是不同,每个观察者有自己的处理逻辑

通用源码

JAVA

//被观察者
public abstract class Subject{
    //定义一个观察者组
    private Vector<Observer> obsVector =new Vector<Observer>();
    //增加一个观察者
    public void addObserver(Observer o){
        this.obsVector=o;
    }
    //删除一个观察者
    public void delObserver(Observer o){
        this.obsVector.remove(o);
    }
    //通知所有观察者
    public void notifyObservers(){
        for(Observer o:this.obsVector){
            o.uodate();
        }
    }
//具体的被观察者
public cass ConcreateSubject extends Subject{
    //具体业务
    public void doSomething(){
        //
        super.notifyObservers();
    }
}
//观察者
public interface Observer{
    //更新
    public void update();
}
//具体的观察者
public class ConcreteObserver implements Observer{
    //更新
    public void update(){
        System.out.println("我已经接收到消息啦,并且已经进行处理");
    }
}
//场景
public class Client{
    public static void main(Sting[] args){
        //创建一个被观察者
        ConcreteSubject subject = new ConcreteSubject();
        //定义一个观察者
        ConcreteObserver obs=new ConcreteObserver();
        //观察者被观察
        subject.addObserver(obs);
        //观察者开始活动了
        subject.doSomething();
}

优点

观察者和被观察者之间是抽象耦合
建立一套触发机制

使用场景

关联行为场景。需要注意的是,关联行为是可以拆分的,而不是“组合”关系
事件多级触发场景
跨系统的消息交换场景,如消息队列

时间: 2024-09-30 00:21:58

适配器模式之观察者模式的相关文章

给 Java 学习者的超全教程整理

Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系统.完整.可学性较强的教程其实并不是那么容易.实验楼上有很多 Java 教程,从基础入门.J2SE 开发.SSH 框架到实战项目都有,因此,这里就把这些课程总结一下,希望对 Java 学习者有所帮助~ 一.Java基础 Java 基础不必多说了,下面的5门课程就可以带你动手学习,入门Java. Ja

讲解JavaScript的Backbone.js框架的MVC结构设计理念_基础知识

什么是Backbone.js?Backbone.js是十大JS框架之首,Backbone.js 是一个重量级js  MVC 应用框架,也是js MVC框架的鼻祖.它通过Models数据模型进行键值绑定及custom事件处理,通过模型集合器Collections提供一套丰富的API用于枚举功能,通过视图Views来进行事件处理及与现有的Application通过JSON接口进行交互. 简而言之,Backbone是实现了web前端MVC模式的js库 什么是MVC?MVC:后端服务器首先(过程1)通过

《新手勿扰》有问题大家解决!!!!在QQ群技术联盟-网页制作:131809496

问题描述 ASP.NET内置对象(RequestResponseSessionApplicationCookieViewState......)OOP思想(这个不用多说)ASP.NET事件处理机制ASP.NET生命周期ASP.NETCodeBehind(代码后置)缓存/URL重写/伪静态/水印/验证码......ASP.NET的安全性了解.NetFrameWork核心类库设计模式(单例模式.适配器模式.观察者模式.工厂模式)了解CLR(公共语言运行时).CTS(通用系统类型).CLS(通用语言规

我面试遇到的,大家看看!

问题描述 写出你知道的设计模式,什么时候会用到设计模式,它的作用是什么? 解决方案 解决方案二:这个我笔试的时候也有,但是我没有答上来帮不上你了不好意思解决方案三:反正就是在设计时采用的一些方法这些方法有助一提高系统的规范性可扩充性可重用性等解决方案四:设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.单件模式,适配器模式,观察者模式,桥模式,工厂模式等等解决方案五:23中常用设计模式解决方案六:大砍

设计模式之旅-第一天 适配器模式

什么是设计模式 在软件开发的世界里,许多领域中的问题具有相似的特性.就像造房子一样,不管要盖一座购物中心 ,还是要盖一座假日酒店,它们之间都有基本上相似的工作步骤,都需要搭建梁柱,铺置房顶等工作. 在做这些工作时都需要遵循某种特殊的技术要求,以使得房子的结构.承受能力达到合理,这些规则是 前人经过精确的计算和失败的教训得来的.对于软件开发也一样,如果我们希望编写出来健壮.灵活的 应用程序,也有必要进行精细的设计,并且可以通过遵循某种规则以达到这个目标.这些规则或者称之 为技巧就是设计模式. 设计

Javascript设计模式:观察者模式

一直以来都想把在实际开发中的一些经验系统地整理一下,共享出来给一些有志于深入B/S开发的朋 友,趁着国庆忙里偷闲,先试验性的写一下有关于Javascript开发中的比较有用的东西. 设计模 式一直以来都是在面向对象的语言,或比较正规化的开发中才会出现的一门程序设计思想.一直以来众 多的前端开发者认为使用OO方式来写JS更像是一个程序开发者,殊不知一旦将这门脚本语言深入进去后 ,仅仅才是一个开始,设计模式仅能算是对程序设计深入了解的第一步. 为什么要用设计模式我 就不多说了,仁者见仁的问题,现在还

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

观察者模式 目录介绍 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 源码解读,

[Head First设计模式]身边的设计模式——适配器模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 [Head First设计模式]面向对象的3特征5原则 [Head First设计模式]鸭子

如何使用 Java8 实现观察者模式?(下)

[编者按]本文作者是 BAE 系统公司的软件工程师 Justin Albano.在本篇文章中,作者通过在 Java8 环境下实现观察者模式的实例,进一步介绍了什么是观察者模式.专业化及其命名规则,供大家参考学习.本文系国内 ITOM 管理平台 OneAPM 工程师编译整理. 线程安全的实现 前面章节介绍了在现代Java环境下的实现观察者模式,虽然简单但很完整,但这一实现忽略了一个关键性问题:线程安全.大多数开放的Java应用都是多线程的,而且观察者模式也多用于多线程或异步系统.例如,如果外部服务