zoukankan      html  css  js  c++  java
  • php设计模式之观察者模式

    观察者模式以前一直不懂,现在有时间从网上搞了一发,自己写了一遍

    <?php
    
    /**
     * 继承PhP的spl接口实现被观察的对象
     * Class MyObject
     */
    class MyObject implements SplSubject
    {
        //定义观察者的集合
        public $observers;
    
        //定义被观察的属性
        public $name;
    
        /**
         * 用Spl的objectStorage进行操作
         * MyObject constructor.
         */
        public function __construct($name)
        {
            $this->observers = new SplObjectStorage();
            $this->name = $name;
        }
    
        /**
         * 增加观察者
         * @param SplObserver $observer 观察者对象
         */
        public function attach(SplObserver $observer)
        {
           $this->observers->attach($observer);
        }
    
        /**
         * 减少观察者
         * @param SplObserver $observer 观察者对象
         */
        public function detach(SplObserver $observer)
        {
            $this->observers->detach($observer);
        }
    
        /**
         * 进行更改通知,通知观察者的对象发生改变
         */
        public function notify()
        {
            // TODO: Implement notify() method.
    
            foreach ($this->observers as $observer) {
                $observer->update($this);
            }
        }
    
        /**
         * 获取名称
         */
        public function getName()
        {
            return $this->name;
        }
    
    
    }
    
    /**
     * 观察者的类别,继承splObserver
     * Class MyObserver
     */
    class MyObserver implements SplObserver
    {
        public function update(SplSubject $subject)
        {
            echo $subject->getName().PHP_EOL;
        }
    }
    
    $observer1 = new MyObserver();
    $observer2 = new MyObserver();
    $subject = new MyObject('哈哈哈哈');
    $subject->attach($observer1);
    $subject->attach($observer2);
    $subject->notify();
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/matengfei123/p/8022572.html
Copyright © 2011-2022 走看看