banner
NEWS LETTER

观察者模式

Scroll down

什么是观察者模式

当一个对象状态发送改变时,依赖它的对象全部会受到通知,并自动更新。观察者模式实现了低耦合的通知机制。
可用于通知或更新操作,进行解耦,避免在原来代码上修改逻辑代码。

观察者模式场景

一个事件发生后,要执行一连串更新操作。传统的方式就是在事件的代码后加入处理逻辑,当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,增加新的逻辑或删除旧的逻辑需要修改事件的主体代码。

观察者模式的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php

/**
* 事件生成器
* Class EventGenerator
*/
abstract class EventGenerator
{
private $observes = [];// 观察者数组

/**
* 添加观察者
* @param Observe $observe
*/
public function addObserve(Observe $observe)
{
$this->observes[] = $observe;
}

/**
* 通知
*/
public function notify()
{
foreach ($this->observes as $observe) {
$observe->update();
}
}
}

/**
* 观察者接口
* Interface Observe
*/
interface Observe
{
public function update();
}

/**
* 事件
* Class User
*/
class User extends EventGenerator
{
/**
* 发送通知
*/
public function send()
{
echo '给用户发送通知...';
$this->notify();
echo '发送成功!';
}
}

/**
* 邮件观察者
* Class EmailObserve
*/
class EmailObserve implements Observe
{

public function update()
{
// TODO: Implement update() method.
echo '发送邮件...';
// 邮件发送逻辑...
echo '邮件发送成功...';
}
}

/**
* 短信观察者
* Class SMSObserve
*/
class SMSObserve implements Observe
{
public function update()
{
// TODO: Implement update() method.
echo '发送短信...';
// 短信发送逻辑...
echo '短信发送成功...';
}
}

$user = new User();
// 添加观察者
$user->addObserve(new EmailObserve());
$user->addObserve(new SMSObserve());
// 发送
$user->send();

运行结果:

1
2
$ php Observe.php
给用户发送通知...发送邮件...邮件发送成功...发送短信...短信发送成功...发送成功!
其他文章
cover
责任链模式
  • 23/10/02
  • 23:19
  • 615
  • 2
目录导航
  1. 1. 什么是观察者模式
  2. 2. 观察者模式场景
  3. 3. 观察者模式的实现
请输入关键词进行搜索