zoukankan      html  css  js  c++  java
  • 观察者模式

      观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。

      类结构图如下:

    观察者模式类结构图

      举个例子,有一个报警系统,监控到异常后需要报警给运维人员,那么运维人员是观察者,我也可以把老板添加到观察者里,让老板也收到这个报警(实事上老板是不会关心到这种鸡毛蒜皮的小事的~~)。

    <?php
    //被观察者抽象类
    abstract class AbstractSubject{
        private $observers = array();
        public function Attach($o){
            $this->observers[] = $o;
        }
        public function Detach($o){
            foreach($this->observers as $k=>$v){
                if($v == $o){
                    unset($this->observers[$k]);
                    break;
                }
            }
        }
        public function Notify($info){
            foreach($this->observers as $v){
                $v->Update($info);
            }
        }
    }
    //被观察者具体实现
    class ConcreteSubject extends AbstractSubject{
        public function baojing($str){
            $this->Notify($str);
        }
    }
    
    //抽象观察者类
    abstract class AbstractObserver{
        abstract public function Update($info);
    }
    //观察者具体类1
    class ConcreteObserver extends AbstractObserver{
        public function Update($info){
            echo "检测到 ".$info;
        }
    }
    //观察者具体类2
    class laoban extends AbstractObserver{
        public function Update($info){
            echo "老板,".$info;
        }
    }
    
    //场景类
    class Client{
        public function run(){
            $subject = new ConcreteSubject;
            $observer = new ConcreteObserver;
            $subject->Attach($observer);
            $laoban = new laoban;
            $subject->Attach($laoban);
            //$subject->Detach($laoban);
            $subject->baojing("啦啦啦 内存快撑暴啦!
    ");
        }
    }
    
    Client::run();

      

  • 相关阅读:
    css实现鼠标悬浮字体流光背景模糊效果
    原生JS实现省市区(县)三级联动选择
    多线程的对象锁和类锁
    session、cookie与“记住我的登录状态”的功能的实现
    Java NIO FileVisitor 高效删除文件
    mysql 服务启动失败
    Http 协议详解
    设计模式 之 策略模式
    简单探讨 javascript 闭包
    数据库SQL优化大总结之 百万级数据库优化方案
  • 原文地址:https://www.cnblogs.com/zhutianpeng/p/4234288.html
Copyright © 2011-2022 走看看