PHP观察者模式实例分析【对比JS观察者模式】
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-23 10:24:00 浏览: 评论:0
这篇文章主要介绍了PHP观察者模式,结合实例形式对比分析JS观察者模式实现方法,给出了php观察者模式的完整定义与使用操作示例,需要的朋友可以参考下。
本文实例讲述了PHP观察者模式,分享给大家供大家参考,具体如下:
1.用js实现观察者模式
- <!DOCTYPE html>
- <html>
- <head>
- <title></title>
- <style type="text/css">
- div{width: 100px;height: 100px;border: 1px #999 solid;margin-bottom: 5px;}
- </style>
- </head>
- <body>
- <!--
- 我们让div对象观察select的变化,selecte变化就会通知这个2个对象,并引起这2个对象的变化,实现观察者模式。
- -->
- <h1>用观察者模式切换页面风格</h1>
- <select>
- <option value="male">男式风格</option>
- <option value="female">女士风格</option>
- </select>
- <button onclick="t1()">观察学习区</button>
- <button onclick="t2()">不观察学习区</button>
- <div id="content">我是内容</div>
- <div id="ad">我是广告</div>
- <div id="study">学习</div>
- </body>
- <script type="text/javascript">
- var sel = document.getElementsByTagName('select')[0];
- sel.observers = {};
- sel.attach = function(key,obj){
- this.observers[key] = obj;
- }
- sel.detach = function(key){
- delete this.observers[key];
- }
- sel.onchange = sel.notify = function(){
- for(var key in this.observers){
- this.observers[key].update(this);
- }
- }
- //客户端
- var content = document.getElementById('content');
- var ad = document.getElementById('ad');
- content.update = function(ob){
- if (ob.value == 'male') {
- this.style.backgroundColor = 'gray';
- }else if(ob.value == 'female'){
- this.style.backgroundColor = 'pink';
- }
- }
- ad.update = function(ob){
- if (ob.value == 'male') {
- this.innerHTML = '汽车';
- }else if(ob.value == 'female'){
- this.innerHTML = '减肥';
- }
- }
- //让content观察select的变化
- sel.attach('content',content);
- sel.attach('ad',ad);
- //新增监听study区
- var study = document.getElementById('study');
- study.update = function(ob){
- if (ob.value == 'male') {
- this.innerHTML = '学习计算机';
- }else if(ob.value == 'female'){
- this.innerHTML = '学习美容';
- }
- }
- sel.attach('study',study);
- function t1(){
- sel.attach('study',study);
- }
- function t2(){
- sel.detach('study');
- }
- </script>
- </html>
2.用php实现观察模式
- <?php
- //php实现观察者
- //php5中提供观察者observer和被观察者subject的接口
- class User implements SplSubject
- {
- public $lognum;
- public $hobby;
- protected $observers = null;
- public function __construct($hobby)
- {
- $this->lognum = rand(1,10);
- $this->hobby = $hobby;
- $this->observers = new SplObjectStorage();
- }
- public function login()
- {
- //操作session等
- $this->notify();
- }
- public function attach(SPLObserver $observer)
- {
- $this->observers->attach($observer);
- }
- public function detach(SPLObserver $observer)
- {
- $this->observers->detach($observer);
- }
- public function notify()
- {
- $this->observers->rewind();
- while ($this->observers->valid()) {
- $observer = $this->observers->current();
- $observer->update($this);
- $this->observers->next();
- }
- }
- }
- //用户安全登录模块
- class Safe implements SPLObserver
- {
- public function update(SplSubject $subject)
- {
- if ($subject->lognum < 3) {
- echo '这是第' . $subject->lognum . '次安全登录<br>';
- }else{
- echo '这是第' . $subject->lognum . '次登录,异常<br>';
- }
- }
- }
- //广告模块
- class Ad implements SPLObserver
- {
- public function update(SplSubject $subject)
- {
- if ($subject->hobby == 'sports') {
- echo '英超开始啦<br>';
- }else{
- echo '好好学习<br>';
- }
- }
- }
- //实施观察
- // $user = new User('sports');
- $user = new User('study');
- $user->attach(new Safe());
- $user->attach(new Ad());
- $user->login();//登录
Tags: PHP观察者模式 JS观察者模式
- 上一篇:PHP钩子实现方法解析
- 下一篇:Swoole4.4协程抢占式调度器详解
相关文章
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之观察者模式定义与用法分析(2021-11-15)
- ·php设计模式之观察者模式定义与用法经典示例(2021-12-19)
- ·php模式设计之观察者模式应用实例分析(2021-12-22)
- ·PHP 观察者模式深入理解与应用分析(2021-12-22)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)