设计模式的学习--观察者模式

为了更愉快的装逼,开始学习php的设计模式之二.

特点

  1. 由一个观察者对应多个被观察者,一对多的关系
  2. 被观察者预留update()方法给观察者调用
//这是一个总的观察者对象
class Observer{
	private $_object=array();

	public function __construct(){
	}
	public function add_object($object){  //增加被观察者对象
		return array_push($this->_object,$object);
	}

	public function remove_object($object){ ////移除被观察者对象
		$index = array_search($object,$this->_object);
		if($index===false){
			return false;
		}else{
			unset($this->_object[$index]);
			return true;
		}
	}

	public function notify(){  //遍历数组,调用被观察者
		if(!empty($this->_object)){
			foreach ($this->_object as $key => $value) {
				$value->update();
			}
			return true;
		}else{
			return false;
		}
	}
}


//这是某个被观察的对象(可以有多个)

class object{
	private $name;
	public function __construct($name){
		$this->name=$name;
	}
	public function update(){//被观察者必须自带一个update()方法,用来被观察者调用
		echo $this->name.' object has already updated<br>';
	}
}
$a1=new object('a1');
$a2=new object('a2');
$a3=new object('a3');

$observer=new Observer();

$observer->add_object($a1);
$observer->add_object($a2);
$observer->add_object($a3);

$observer->notify();

Comments

comments powered by Disqus