?php
/**
* @desc 利用觀察者模式,實現不同用戶進入顯示不同的內容
* 1.主題
* 2.觀察者接口
* 3.觀察者
* ***/
interface Observer{
//添加觀察者對象
public function attach($observer);
//刪除觀察者對象
public function detach($observer);
//執行觀察者需要執行的方法
public function doIt();
}
class User implements Observer{
public $obj = [];
/*
*@desc 傳遞的對象不在存儲的obj對象中則將對象存儲到obj中
*/
public function attach($observer){
if(!in_array($observer,$this->obj)){
$this->obj[] = $observer;
}
}
/**
* @desc 取消觀察者觀察
* **/
public function detach($observer){
$key = array_search($observer, $this->obj);
if($key){
unset($this->obj[$key]);
}
}
/***
* @desc 獲取所有被觀察者的對象,執行觀察
* **/
public function doIt(){
if(!empty($this->obj)){
foreach ($this->obj as $v){
$v->active();
}
}
}
}
/**
* @desc 觀察者接口
* **/
interface obsUser{
public function active();
}
/*
* @實現零售店用戶實現方法類
* **/
class storeUser implements obsUser{
public function active(){
echo "我是零售店用戶\n";
}
}
/**
* @desc 實現經銷商用戶方法類
* **/
class supplierUser implements obsUser{
public function active(){
echo "我是經銷商用戶\n";
}
}
/*
* 實例化觀察者接口類
* **/
$user = new User();
//添加門店用戶類到觀察者對象
$user->attach(new storeUser());
//添加經銷商用戶類到觀察者對象
$user->attach(new supplierUser());
//監控觀察者動作并輸出結果
$user->doIt();
更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》