观察者模式——订制你的今日头条

本文介绍如何使用观察者模式实现消息订阅与更新推送功能。通过定义主题与订阅者接口,实现了一对多的消息通知机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信息爆炸的今天,根据自己的爱好去订阅相关的信息是很有必要的。
今天我们就来演示如何用观察者模式来实现订阅消息的更新推送。
首先我们定义一个主题(抽象通知者)抽象类:

abstract class theme{
     protected $themeName;
     protected $subscriber=array();
     function addSubscriber(subscriber $sub){
       $this->subscriber[]=$sub;
     }
     function removeSubscriber(subscriber $sub){
            $temp=array();
         foreach($this->subscriber as $value){
            if($value != $sub){
               $temp[]=$value;
            }
        }
          $this->subscriber=$temp; 
  }
       function notify(){
          foreach($this->subscriber as $value){
             $value->update($this->themeName);
          }
       }
}

然后定义一些主题如下:

class IT extends theme{
    function __construct(){
        $this->themeName='IT';
    }
   //包含IT主题独有的一些特定信息
     ......................
}
class sports extends theme{
    function __construct(){
        $this->themeName='sports';
    }
   //包含体育主题独有的一些特定信息
     ......................
}

接着定义订阅者(抽象观察者)接口:

interface subscriber{
    function update($name);
}

再来定义几个订阅者(具体观察者)

class changeUI implements subscriber{
     private $myTheme;
     function update($name){
        echo "$name主题消息已更新,将会自动更新界面<br>";
     }
}
class remind implements subscriber{
     private $myTheme;
     function update($name){
        echo "$name主题消息已更新,自动弹框提醒";
     }
}

客户端代码:

  //实例化主题对象
  $themeIT=new IT();
  $themeSports=new sports();
  //实例化订阅者
  $ui=new changeUI();
  $remind=new remind();
  //设置IT消息更新时弹框通知并且刷新界面,体育消息更新时仅刷新界面
  $themeIT->addSubscriber($ui);
  $themeIT->addSubscriber($remind);
  $themeSports->addSubscriber($ui);
  $themeIT->notify();
  $themeSports->notify();

总结
观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听一个主题,当主题发生改变时,通知所有观察者实现更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值