Quick actions

cmd+k|ctrl+k

Navigation

Languages

观察者模式

Snippet info

Language

Php

Visibility

public

Author

dugujianxiao

Created

2015-11-02T09:35:56Z

Updated

2015-11-02T09:35:56Z

<?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' added to user list\n" );
  }
}

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