php设计模式之观察者模式

观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并自动更新.

目录结构

|obService  #项目根目录
|--Think  #核心类库
|----Loder.php  #自动加载类
|----subJect  #抽象被观察者类
|----obServer  #具体被观察者
|----server  #抽象观察者接口
|----appServer.php  #app端
|----webServer.php  #web端
|--index.php #单一的入口文件

代码实践

抽象被观察者 Think/subJect.php

servers[] = $server;
        echo '添加观察者成功'.PHP_EOL;
    }
    //删除观察者
    public function delServer(server $server) {
        $serverType = false;
        //查询观察者的值
        $key = array_search($server,$this->servers);
        if(!$key){
            if($server === $this->servers[$key]){
                unset($this->servers[$key]);
                $serverType = true;
            }
        }
        if($serverType){
            echo '删除观察者成功'.PHP_EOL;
        }else{
            echo '观察者不存在'.PHP_EOL;
        }
    }
    //通知所有观察者
    public function notify() {
        foreach ($this->servers as $server){
            $server->update();
        }
    }
}

具体被观察者 服务端 Think/obServer.php

notify();
    }
}

抽象观察者接口 Think/server.php

具体观察者类 web端 Think/webServer.php

具体观察者类 app端 Think/appServer.php

自动加载 Think/Loder.php

单一的入口文件index.php

addServer($web);
$server->addServer($app);

//被观察者发布信息
$server->publish();
//删除观察者
$server->delServer($web);
//再次发布信息
$server->publish();

观察者模式的一个关键词就是触发,被观察者动作触发观察者的做出对应的响应.

上一篇 php设计模式之数据映射模式
下一篇 php设计模式之装饰器模式

你可能感兴趣的:(php设计模式之观察者模式)