观察者模式

<?php
// 主题接口
interface Subject{
    public function register(Observer $observer);
    public function notify();
}
// 观察者接口
interface Observer{
    public function watch();
}
// 主题
class Action implements Subject{
     public $_observers=array();
     public function register(Observer $observer){
         $this->_observers[]=$observer;
     }
 
     public function notify(){
         foreach ($this->_observers as $observer) {
             $observer->watch();
         }
 
     }
 }
 
// 观察者
class Cat implements Observer{
     public function watch(){
         echo "Cat watches TV<hr/>";
     }
 } 
 class Dog implements Observer{
     public function watch(){
         echo "Dog watches TV<hr/>";
     }
 } 
 class People implements Observer{
     public function watch(){
         echo "People watches TV<hr/>";
     }
 }
 
 
 
// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();

 

# 观察者接口
interface watch{

    # 参与竞拍的方法
    public function auction($price);

    # 被通知的方法
    function notify( $msg );
}


# 产生事件的类  竞拍之后通知所有人
class product {

    private $people = [];

    # 所有参与竞拍的人
    function register(  $user ){
        $this -> people[] = $user;
    }
    
    # 通知所有人,现在有人竞拍了
    function notify( $msg  ){
        foreach( $this -> people as $k => $v ){
            $v -> notify($msg);
        }
    }

}
# 张三用户
class Zhangsan implements watch{

    public function auction(  $price ){
        echo '张三出价了<br/>';
    }
    
    public function notify( $msg ){
        echo '这里是张三这个用户,接受到的信息<br/>';
        echo $msg .'<hr/>';
        //exit;
    }

}

# 李四用户
class Lisi implements watch{

    public function auction( $price ){
        echo '李四出价了<br/>';

    }

    public function notify( $msg ){
        echo '这里是李四这个用户,接受到的信息<br/>';
        echo $msg .'<hr/>';
        //exit;
    }
}


$product_obj = new Product();

# 张三参与竞拍
$product_obj -> register( new Zhangsan  );

$lisi_obj = new Lisi();

$product_obj -> register( $lisi_obj  );

# 李四出价
$lisi_obj -> auction(100);

$product_obj -> notify('李四出价100<br/>');

# 李四出价
$lisi_obj -> auction(130);

$product_obj -> notify('李四出价130<br/>');
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值