Quick actions

cmd+k|ctrl+k

Navigation

Languages

观察者模式

Snippet info

Language

Php

Visibility

public

Author

mosi

Created

2018-11-21T03:58:52Z

Updated

2018-11-21T03:58:52Z

<?php
//定义四个元素:两个接口和两个类。IObservable 接口定义可以被观察的对象,UserList 实现该接口,以便将本身注册为可观察。
//IObserver 列表定义要通过怎样的方法才能成为观察者,UserListLogger 实现 IObserver 接口。
interface IObserver
{
  function onChanged( $sender, $args );
}

interface IObservable
{
  function addObserver( $observer );
}

class UserList implements IObservable
{
  private $_observers = array();

  public function addCustomer( $name )
  {
    foreach( $this->_observers as $obs )
      $obs->onChanged( $this, $name );
  }

  public function addObserver( $observer )
  {
    $this->_observers []= $observer;
  }
}

class UserListLogger implements IObserver
{
  public function onChanged( $sender, $args )
  {
    echo( "'$args' QQ2098175794\n" );
  }
}

$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "陌斯" );
INFO