美文网首页
观察者模式 -- 发送状态变化通知

观察者模式 -- 发送状态变化通知

作者: 戴廿叁 | 来源:发表于2020-02-12 16:41 被阅读0次

### 1. 概述

观察者模式是一种被广泛应用的模式。Observer即观察者,当被观察对象的状态变化时,就会通知观察者做出相应的处理。

所谓观察者并不是真的能够“主动”观察对象,而是对象做出通知行为。所以观察者模式也被称为 Publish-Subscribe(发布-订阅)模式。

观察者模式适合应用于需要针对对象状态做出相应处理的场景。

### 2. 模式类图

### 3. 模式角色

> **Subject(观察对象)**

Subject 角色即被观察的对象,Subject 角色定义了**注册观察者**和**删除观察者**的方法。同时还声明了**获取现在状态**的方法

> **ConcreteSubject(具体的观察对象)**

ConcreteSubject 角色表示具体的观察对象。当自身状态发生变化时,会通知已经注册的观察者。

> **Observer(观察者)**

Observer 角色负责接收来自 Subject 角色的状态变化的通知。它需要声明一个接收通知的方法用以被观察对象调用。

> **ConcreteObserver(具体的观察者)**

ConcreteObserver 角色用于实现接收通知方法的具体实现。

### 4. 代码示例

我们定义一个会随机生成数字的被观察对象,以及两个会根据产生的数字做出不同处理的观察者。

> Observer.java

```java

public interface Observer {

public abstract void update(NumberGenerator generator);

}

```

> NumberGenerator.java

```java

public abstract class NumberGenerator {

private ArrayList observers = new ArrayList();

public void addObserver(Observer observer) {

observers.add(observer);

}

public void deleteObserver(Observer observer) {

observers.remove(observer);

}

public void notifyObservers() {

Iterator it = observers.iterator();

while (it.hasNext()) {

Observer o = (Observer) it.next();

o.update(this);

}

}

public abstract int getNumber();

public abstract void execute();

}

```

> RandomNumberGenerator.java

```java

public class RandomNumberGenerator extends NumberGenerator {

private Random random = new Random();

private int number;

@Override

public int getNumber() {

return number;

}

@Override

public void execute() {

for (int i = 0; i < 20; i++) {

number = random.nextInt(50);

notifyObservers();

}

}

}

```

> DigitalObserver.java

```java

public class DigitalObserver implements Observer {

@Override

public void update(NumberGenerator generator) {

System.out.println("DigitalObserver: " + generator.getNumber());

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

```

> GraphObserver.java

```java

public class GraphObserver implements Observer {

@Override

public void update(NumberGenerator generator) {

        System.out.println("GraphObserver:");

int count = generator.getNumber();

for (int i = 0; i < count; i++) {

System.out.print("*");

}

System.out.println("");

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

```

相关文章

  • 观察者模式 -- 发送状态变化通知

    ### 1. 概述 观察者模式是一种被广泛应用的模式。Observer即观察者,当被观察对象的状态变化时,就会通知...

  • Observer模式(观察者模式)

    观察者模式(Observer Pattern):当观察对象的状态变化时,会自动通知给观察者。观察者模式属于行为型模...

  • 行为型设计模式总结

    观察者模式 Observer模式作用是当一个对象发生变化时,能够自动通知它的观察者刷新状态。Observer模式提...

  • Rxjs 的一些学习笔记

    源自观察者-发布者设计模式: 观察者注册于 Subject 上,每当 subject 状态发生变化时,通知观察者。...

  • Observer模式

    java的设计模式 作用 当观察对象的状态发生变化时,通知给观察者(观察者订阅被观察者的状态)应用 需要根据对象状...

  • Observer模式

    观察者模式比较容易理解,就是当观察对象状态发生变化的时候,通知观察者。一个对象可以有多个观察者,所以通知的时候也会...

  • PHP 观察者模式

    观察者模式,当一个对象状态发送改变时,依赖它的对象全部会收到通知,并自动更新。观察者模式实现了低耦合,非侵入式的通...

  • ios观察者模式

    什么是观察者模式?当A对B的变化感兴趣,需要监听B的状态变化,就注册为B的观察者,当B发生变化时通知A,告知B发生...

  • 设计模式与软件原则 (五):观察者「Observor」模式

    Observor Design Pattern 观察者设计模式用于通知其他实体其状态的变化。 下面看一个简单的示例:

  • Objective-C:通知(NSNotification)

    特点 使用观察者模式来实现跨层传递消息 一对多 一对多的实现机制 发送者发送通知到通知中心,有通知中心发送通知给所...

网友评论

      本文标题:观察者模式 -- 发送状态变化通知

      本文链接:https://www.haomeiwen.com/subject/umfyoxtx.html