PHP-观察者模式

什么是观察者模式

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

可用于通知或更新操作,进行解耦,避免在原来代码上修改逻辑代码。

观察者模式场景

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

观察者模式的实现


<?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();

运行结果:


E:\php_project\设计模式\Lemon_lyue>php Observe.php

给用户发送通知...发送邮件...邮件发送成功...发送短信...短信发送成功...发送成功!

更多内容关注个人博客:lemonlyue.github.io/

本作品采用《CC 协议》,转载必须注明作者和本文链接
lemon_lyue
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!