<?php //观察者模式: 经过注册对象去批量改变对象的状态 //好比跑男,导演说规则有变化;红队和蓝队都作出了调整 interface TeamInteface{ public function action(); } class ReadTeam implements TeamInteface{ public function action(){ echo "红队在行动\n"; } } class BlueTeam implements TeamInteface{ public function action(){ echo "蓝队在行动\n"; } } class Direct{ private $_list = array(); public function add(TeamInteface $obj){ $this->_list[] = $obj; } public function ruleChangeOld(){ echo "传统改变\n"; } public function ruleChange(){ echo "新改变\n"; foreach($this->_list as $v){ $v->action(); } } } //传统方式,每次有更改都要作些 $dir_obj_old = new Direct(); $dir_obj_old->ruleChangeOld(); $read_obj = new ReadTeam(); $read_obj->action(); $blue_obj = new BlueTeam(); $read_obj->action(); //是否是代码量减小了一些哦 $dir_obj = new Direct(); $dir_obj->add(new ReadTeam()); $dir_obj->add(new BlueTeam()); $dir_obj->ruleChange();