• 观察者模式observer(用于不同类的中 板块的显示或其它操作)


    用处:以前的一个类做一件事,而当需要做多件事的时候,就需要在同一个类中,改N多代码, 不便于维护和扩展,偶合依赖太强
    然后,就有了观察者模式
    逻辑图:

    1、在原始类中,调用一个,父类中的一个方法notify()继承下来的; 此方法用于显示,所用的模板。
    2、建立一个抽象类,在其中,创建两个方法
    addobserver(),用于,增加对象(新的类);
    notify(),用于显示或调用,该对象的update()方法,(由于添加的对象(类),可能不只一个,所以,得以数组的形式保存,并遍历调用update()方法)
    3、创建一个Iobserver()一个接口类,在该类中创建一个update()方法;
    4、然后,就可以创建新类了,而新类,就应用Iobserver接口,并实现update()方法;//这里就可以自定义代码

    5、使用时,就用原始所类中所创建的对象,调用addobserver(new 新类);这样子就增加了一个模块,并且还实现了新的方法


    <?php
    define('BASEDIR',__DIR__);
    require BASEDIR."/Phpclass/Loader.php";//引入一个能载入全部类的文件
    spl_autoload_register('\Phpclass\Loader::autoload');//引用该类中自动注册文件的函数

    class Page extends PhpclassObserverbase //0、扩展Observerbase类,里面一个add方法和一个note通知方法
    {
    function triger()
    {
    echo "逻辑一最初的显示 ";
    $this->notify();//1、调用父类的通知方法
    }
    }
    class Observeer1 implements PhpclassIobserver //5、创建一个接口类,应用接口的方法,然后可进行相关的内容进行修改
    {
    function update($info=null){

    echo "this is a new luoji ";
    }

    }

    class Observeer2 implements PhpclassIobserver
    {
    function update($info=null){

    echo "this is a new 更进一步 ";
    }

    }

    $page =new Page();

    $page->addobserver(new Observeer1);//当前对象,调用父类的add方法,而传的对象,就是按接口规定的 对象,然后进行相关操作
    $page->addobserver(new Observeer2);
    $page->triger();
    -----------------------------------------------------------------------------------------Index6.php
    <?php
    namespace Phpclass;
    abstract class Observerbase
    {
    private $observers =array();
    function addobserver( Iobserver $observer){//2add类,相当于于把,新加的对象放到一个数组内
    $this->observers[] = $observer;
    }
    function notify(){//3、通知方法,可以理解为把每个对象遍历,然后调用当前对象的update方法,而当前对象又在在规定的接口中
    foreach ($this->observers as $observer)
    {
    $observer->update();//3.5、这里的update方法,就可以自己在新的类中,自定义了
    }

    }

    }
    -----------------------------------------------------------------------------------------Observerbase.php
    <?php
    namespace Phpclass;
    interface Iobserver //4、接口中的update方法
    {
    function update($info = null);
    }
    
    
    -----------------------------------------------------------------------------------------Iobserver.php
     
  • 相关阅读:
    数据库事务的特性以及隔离级别
    非受检异常(运行时异常)和受检异常的区别等
    在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。
    perl的foreach循环的坑
    javascript中快速求数组的全部元素的相加之和
    js 百度地图
    PHP 取前一天或后一天、一个月时间
    php截取字符串函数
    js jquery 基本元素操作
    PHP 替换标签和标签内的内容
  • 原文地址:https://www.cnblogs.com/nfyx/p/10749217.html
Copyright © 2020-2023  润新知