每日一模式之觀察者模式

<?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();
相關文章
相關標籤/搜索