【设计模式】—— 观察者模式Observer

  前言:【模式总览】——————————by xingoo

  模式意图

  观察者模式,也叫发布/订阅模式,从名字来说就能察觉到它的过程应该是,发布——其他人接受。

  这个模式定义了对象之间的一种依赖关系,当一个对象发生变化时,其他的对象收到更新,也发生变化

  模拟我们订阅邮件这个场景,不管我们的邮箱是在登陆还是关闭,邮件都会发送到邮箱里面。只要把自己的邮箱订阅到这个邮件就可以了!这个模式也是这样一个过程。

  这个模式代码相对来说比较容易理解,而且应用很广泛。

  应用场景

  1 当一个模型有几个展现方面,通过修改一个展现,顺便更新其他的。就好比一个网站的有web端,也有移动端,当web端的数据发生变化时,移动端的数据展现也要更新。

  2 对一个对象发生改变,而不知道将有多少对象会发生改变时,利用这种模式可以有效的管理对象。

  模式结构

  Subject 抽象的主题角色

interface Subject{
    public void attach(Observer observer);
    public void detach(Observer observer);
    void notifyObservers();
}

  ConcreteSubject 具体的主题角色,内部有一个容易,用于存放订阅者

class ConcreteSubject implements Subject{
    List<Observer> list = new ArrayList();
    public void attach(Observer observer) {
        list.add(observer);
    }
    public void detach(Observer observer) {
        list.remove(observer);
    }
    public void notifyObservers() {
        for(Observer o : list){
            o.update();
        }
    }
}

  Observer 抽象的订阅者角色

interface Observer{
    public void update();
}

  ConcreteObserver 具体的订阅者

class ConcreteObserver1 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver1 update");
    }
}
class ConcreteObserver2 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver2 update");
    }
}
class ConcreteObserver3 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver3 update");
    }
}

  全部代码

 1 package com.xingoo.test.design.observer;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 interface Subject{
 7     public void attach(Observer observer);
 8     public void detach(Observer observer);
 9     void notifyObservers();
10 }
11 class ConcreteSubject implements Subject{
12     List<Observer> list = new ArrayList();
13     public void attach(Observer observer) {
14         list.add(observer);
15     }
16     public void detach(Observer observer) {
17         list.remove(observer);
18     }
19     public void notifyObservers() {
20         for(Observer o : list){
21             o.update();
22         }
23     }
24 }
25 interface Observer{
26     public void update();
27 }
28 class ConcreteObserver1 implements Observer{
29     public void update() {
30         System.out.println("ConcreteObserver1 update");
31     }
32 }
33 class ConcreteObserver2 implements Observer{
34     public void update() {
35         System.out.println("ConcreteObserver2 update");
36     }
37 }
38 class ConcreteObserver3 implements Observer{
39     public void update() {
40         System.out.println("ConcreteObserver3 update");
41     }
42 }
43 public class Client {
44     public static void main(String[] args) {
45         Subject subject = new ConcreteSubject();
46         Observer o1 = new ConcreteObserver1();
47         Observer o2 = new ConcreteObserver2();
48         Observer o3 = new ConcreteObserver3();
49         subject.attach(o1);
50         subject.attach(o2);
51         subject.attach(o3);
52         subject.notifyObservers();
53
54         subject.detach(o2);
55         subject.notifyObservers();
56     }
57 }

  运行结果

ConcreteObserver1 update
ConcreteObserver2 update
ConcreteObserver3 update
ConcreteObserver1 update
ConcreteObserver3 update
时间: 2024-08-04 22:12:22

【设计模式】—— 观察者模式Observer的相关文章

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权所有, 禁止转载, 如有转载, 请站内联系. 观察者模式(Observer Pattern): 定义了对象之间的一对多的依赖, 这样一来, 当一个对象改变状态时, 它的所有依赖者都会收到通知并自动更新. 使用方法: 1. 首先新建主题(subject)接口, 负责注册(register)\删除(remove

设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法

观察者模式(Observer Pattern) Java内置 使用方法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 观察者模式(observer pattern)详解, 参见: http://blog.csdn.net/caroline_wendy/article/details/26583157 Java内置的观察者模式, 是通过继承父类, 实现观察者模式的几个主要函数: Observerable(可被观

说说设计模式~观察者模式(Observer)

观察者模式,也叫发布/订阅模式(publish/subscribe),监视器模式等.在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.. 何时能用到它? 此种模式通常被用来实现事件处理系统,例如,当一个数据仓储操作中,它的添加功能可能会有一个功能,当添加被触发时,所以订阅了这个添加事件需求的代码 块,都会被触发执行,在这个过程中,数据仓储的添加操作就是被观察者,而所以的订阅者就是它的观察者,发被观察者在某种情况

设计模式 - 观察者模式(Observer Pattern) 详细说明

观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部, 禁止转载, 如有转载, 请站内联系. 观察者模式(Observer Pattern): 定义了对象之间的一对多的依赖, 这样一来, 当一个对象改变状态时, 它的全部依赖者都会收到通知并自己主动更新. 用法: 1. 首先新建主题(subject)接口, 负责注冊(register)\删除(remo

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

一.观察者模式 观察者模式是在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多. 二.UML类图 三.示例 //观察者 class Observer { public: Observer() {} virtual ~Observer() {} virtual void Update() {} }; //博客 class Blog { public: Blog() {} virt

C#设计模式——观察者模式(Observer Pattern)

一.概述在软件设计工作中会存在对象之间的依赖关系,当某一对象发生变化时,所有依赖它的对象都需要得到通知.如果设计的不好,很容易造成对象之间的耦合度太高,难以应对变化.使用观察者模式可以降低对象之间的依赖,以松耦合的方式实现这一目标.二.观察者模式观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新.其结构图如下: Subject知道它的所有观察者并提供了观察者注册和删除订阅的接口.Observer为那些在目标发生改变时需获得通知的对象定义

23种设计模式--观察者模式-Observer Pattern

一.观察者模式的介绍      观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项目我们经常会用这些例子,这样避免了我们使用接口等那些依赖,比如电商项目中得降价通知,然后在来个生活中具体一点的比如公交车的例子,每一站都会对乘客进行提醒等等,我列举的这2个例子在我GITHUb上都有体现:下面用降价通知的Demo给大家具体来说一下,具体的代码还需要大家去下载观看: 二.观察者模式De

Java设计模式之观察者模式(Observer Pattern)

Observer Pattern 是一种常用的设计模式,它是一种事件监听模型.该模式有两个角色,一个是Subject, 另一个是Observer.Subject 保存有多个Observer的引用,一旦特定的事件发生,Subject会通知它所有的Observer,Observer得到该通知后执行相关程序逻辑.其中,Observer只有先向Subject注册后才能被Subject知晓.这就像订报纸,只有我们向出版社提出订报的申请,出版社才会把我们列入订阅者名单,然后每当新报纸印好时,出版社会通知订阅

[Android&amp;amp;Java]浅谈设计模式-代码篇:观察者模式Observer

观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个Demo来描写叙述一下这种思想,用java内置的Observer来实现这一思想. 好,程序猿是不善言语的,看代码先. 1.demo的结构: 2.先创建我们的主题类Subject,他就是我们本demo的明星类.继承了Observable,顾名思义,就是被观察的类 .其它观察者对他但是虎视眈眈哦(事实上

设计模式之观察者模式(Observer)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以