打印 上一主题 下一主题
收起左侧

php-观察者模式

[复制链接]

552

主题

569

帖子

1万

积分

管理员

站长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
16427

灌水之王

QQ
跳转到指定楼层
楼主
发表于 2020-5-31 17:19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x


开始实现
目录结构:
Core
    EventGenerator.php
    Observer.php
indedx.php

EventGenerator.php:
[PHP] 纯文本查看 复制代码
<?php


namespace Core;


abstract class EventGenerator
{
    private $observer = array();
    function addObserver(Observer $observer){
        $this->observer[] = $observer;
    }

    function notify(){
        foreach ($this->observer as $observer){
            $observer->update();
        }
    }
}


Observer.php:
[PHP] 纯文本查看 复制代码
<?php


namespace Core;


interface Observer
{
    function update($event_info = null);
}


index.php
[PHP] 纯文本查看 复制代码
<?php
define('BASE_ROOT', __DIR__);

require_once BASE_ROOT.DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.'AutoLoad.php';
spl_autoload_register('\\core\\AutoLoad::autoLoad');

class Event extends \Core\EventGenerator {
    function trigger(){
        echo "Event<br />";
        $this->notify();
    }
}

class Observer1 implements \Core\Observer{

    function update($event_info = null)
    {
        echo "observer 1<br />";
    }
}

class Observer2 implements \Core\Observer{

    function update($event_info = null)
    {
        echo "observer 2<br />";
    }
}

$ev = new Event();
$ev->addObserver(new Observer1());
$ev->addObserver(new Observer2());
$ev->trigger();


现在实现的时,每个需要执行的方法都是一个类中的一个同名方法
后面可以改进为传入某个类的方法,并传入参数进行处理
0 0



上一篇:php-数据表对象映射模式-使用工厂方法
下一篇:php-原型模式
QQ:2424004764
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|客户端下载|先锋者IT论坛 ( 湘ICP备16007032号湘公网安备 43030202001052号

GMT+8, 2024-4-20 23:34 , Processed in 0.088533 second(s), 16 queries , File On.

Powered by Discuz! X3.3

© 2017 bbs.fologde.com. Template By Gstudio

快速回复 返回顶部 返回列表