php設計模式之觀察者模式

<?php
/**
* @desc 利用觀察者模式,實現不一樣用戶進入顯示不一樣的內容
* 1.主題
* 2.觀察者接口
* 3.觀察者
* ***/
interface Observer{

//添加觀察者對象
public function attach($observer);

//刪除觀察者對象
public function detach($observer);

//執行觀察者須要執行的方法
public function doIt();

}php

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

}this


/**
* @desc 觀察者接口
* **/
interface obsUser{
public function active();
}server


/*
* @實現零售店用戶實現方法類
* **/
class storeUser implements obsUser{

public function active(){
echo "我是零售店用戶\n";
}

}對象

/**
* @desc 實現經銷商用戶方法類
* **/
class supplierUser implements obsUser{接口

public function active(){
echo "我是經銷商用戶\n";
}io

}function

/*
* 實例化觀察者接口類
* **/
$user = new User();class

//添加門店用戶類到觀察者對象
$user->attach(new storeUser());監控

//添加經銷商用戶類到觀察者對象
$user->attach(new supplierUser());foreach

//監控觀察者動做並輸出結果$user->doIt();

相關文章
相關標籤/搜索