码迷,mamicode.com
首页 > 其他好文 > 详细

观察者模式

时间:2017-04-05 20:11:51      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:观察者模式   斗地主   style   key   font   邮件通知   his   container   echo   

观察者模式为您提供了避免组件之间紧密耦合的另一种方法
这种模式是什么原理呢?
咱们需要先知道什么是观察者,   大家有玩过斗地主的吧.   没玩过也见过. 就是有的人可以参与游戏.而有的人可以在边上观战. 这种观战的人,就叫观察者.
设计模式中的观察者是什么意思呢?咱们就以实际的案例来描述这个模式 有时候,比如发广告,需要群发邮件通知一下,那怎么做呢(简单的场景,并不符合现实情况)

这时,需要写一个类(注册器,也就是被观察者)用于注册和通知功能. 另一个类(观察者)就是用来具体通知动作的类.代码如下

[PHP] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
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
<?php
/**
 * 注册的注册器功能
 */
class Register
{
    public $mObList = [];//观察者列表
    /**
     * 注册方法
     */
    public function registerObj($obj)
    {
        $this->mObList[] = $obj;
    }
    /**
     * 执行通知
     */
    public function send()
    {
        foreach ($this->mObList as $obj)
        {
            $obj->sendMessage();
        }
    }
     
}
 
/**
 * 通知类的接口类(观察者接口)
 */
interface INotify
{
    /**
     * 发送消息的功能
     */
    public function sendMessage();
}
/**
 * 邮件通知的类(观察者)
 */
class Email implements INotify
{
    /**
     * 以邮箱的方式发送消息
     */
    public $mEmail = ‘‘;
    public function __construct($email)
    {
        $this->mEmail = $email;
    }
    public function sendMessage()
    {
         echo $this->mEmail . ‘已经邮件通知!<hr/>‘;
    }   
}
//功能实现代码
$observer = new Register();//实例化注册器
//注册多个观察观
$observer->registerObj(new Email(‘123@php20.com‘));
$observer->registerObj(new Email(‘234@php20.com‘));
$observer->registerObj(new Email(‘345@php20.com‘));
$observer->registerObj(new Email(‘456@php20.com‘));
$observer->registerObj(new Email(‘567@php20.com‘));
$observer->registerObj(new Email(‘678@php20.com‘));
//发送消息
$observer->send();
?>


执行结果:

123@php20.com已经邮件通知!
234@php20.com已经邮件通知!
345@php20.com已经邮件通知!
456@php20.com已经邮件通知!
567@php20.com已经邮件通知!
678@php20.com已经邮件通知!

观察者模式

标签:观察者模式   斗地主   style   key   font   邮件通知   his   container   echo   

原文地址:http://www.cnblogs.com/ghjbk/p/6670230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!