观察者模式又叫做发布订阅模式。。。
个人感觉这两种叫法代表的含义完全不一样。
观察者模式 - 感觉在别人背后偷偷摸摸的
发布订阅模式 - 光明正大
whatever...
当今社会有钱人到处都是, 古人有云: 男人有钱就变坏 (好像不是古人说的吧。。。)
虽然不全对, 但也确实大有人在。
下面我们就老婆请电视台监视老公私会小三为背景来讲解观察者模式。
(不知大家有没看过 “大城小说”, 以前叫“好奇害死猫”, 里面就经常有这样的事情)
好啦, 进入正题, 我们先来定义观察者接口
public interface Observer {
// 电视台如果发现什么就马上通知我
void notify(String message);
}
然后电视台成了具体的观察者
public class TV implements Observer {
@Override
public void notify(String message) {
// 这里实际上可能是给老婆打电话什么的。。。
System.out.println("电视台: 你老公, 尽然" + message);
}
}
现在轮到被观察者出场了
// 定义一个淫棍
public interface YinGun {
// 和小三私会
void dateWithTheThirdOne();
}
然后是老公
public class Husband implements YinGun {
@Override
public void dateWithTheThirdOne() {
System.out.println("老公: 正和小三一起在happy");
}
}
好啦, 到先在为止, 老公和小三一起happy还没人知道。。。 可是老婆请了电视台。。。老公在不知情的情况下被监视了!!!
public class Husband implements YinGun, Observable {
// 多家电视台都被请来了, 安插在老公身边, 老公却不知道
private List<Observer> observerList = new ArrayList<Observer>();
@Override
public void dateWithTheThirdOne() {
System.out.println("老公: 正和小三一起在happy");
// 所有的事情都被电视台发现了
this.notifyObservers("和小三在一起happy");
}
@Override
public void addObserver(Observer observer) {
this.observerList.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
if (this.observerList.contains(observer)) {
this.observerList.remove(observer);
}
}
@Override
public void notifyObservers(String message) {
// 大家是否想起gossip girl... 群发!!!!!
for (Observer observer : observerList) {
observer.notify(message);
}
}
}
看看客户端代码:
public class Client {
public static void main(String[] args) {
// 被观察者 和 观察者
Husband hus = new Husband();
Observer CCAV = new TV();
// 一不小心就被老婆请的CCAV给盯上了
hus.addObserver(CCAV);
// 老公不知道, 继续做他的
hus.dateWithTheThirdOne();
}
}
这下什么是请都被老婆知道了。。。
引用
老公: 正和小三一起在happy
电视台: 你老公, 尽然和小三在一起happy
好啦, 纯属娱乐。。。像前面说的, 在实际生活当中把该模式当做“发布订阅模式”里理解的场景是非常多的, 比如:RSS, 手机报, 等等。
P.S 实际上java.util.* 提供了Observable抽象了。 我们只需要继承下来就可以了, 不需要自己定义Observable接口了。
分享到:
相关推荐
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
观察者模式,也被称为发布-订阅模式,是软件设计中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在分布式系统、事件驱动...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...
观察者模式详解 观察者模式(Observer Design Pattern)是行为型设计模式的一种,主要解决的是“类或对象之间的交互”问题。它定义了一个一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会自动收到...
观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在这个"股票分析程序"中,我们很显然看到它利用了这种模式来实时更新股票...
观察者模式是面向对象设计中的一种经典模式,它在软件工程中扮演着重要的角色,用于实现对象间的松耦合。这种模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件驱动的系统或者实时...
观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java或其他面向对象语言中,这种模式通常用于实现事件处理或发布/订阅系统。在给定的“观察者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
### Unity3D设计模式之观察者模式 #### 观察者模式概述 观察者模式(Observer Pattern)是一种软件设计模式,属于行为型模式之一。它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它...
### 观察者模式概述与应用 #### 一、观察者模式定义 观察者模式是一种常用的软件设计模式,主要用于处理对象间的依赖关系。在这种模式下,一个对象(称为“主题”或“被观察者”)负责维护一组依赖于它的对象...