<?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();