<?php
/**
* 觀察者模式
* @author: Mac
*/
class
Paper{
/* 主題 */
private
$_observers
=
array
();
public
function
register(
$sub
){
/* 注冊觀察者 */
$this
->_observers[] =
$sub
;
}
public
function
trigger(){
/* 外部統一訪問 */
if
(!
empty
(
$this
->_observers)){
foreach
(
$this
->_observers
as
$observer
){
$observer
->update();
}
}
}
}
/**
* 觀察者要實現的接口
*/
interface
Observerable{
public
function
update();
}
class
Subscriber
implements
Observerable{
public
function
update(){
echo
"Callback\n"
;
}
}
下面是測試代碼
/* 測試 */
$paper
=
new
Paper();
$paper
->register(
new
Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper
->trigger();
總結 當新對象要填入的時候,只需要在主題(又叫可觀察者)中進行注冊(注冊方式很多,你也可以在構造的時候,或者框架訪問的接口中進行注冊),然後實現代碼直接在新對象的接口中進行。這降低了主題對象和觀察者對象的耦合度。 好的設計模式不會直接進入你的代碼中,而是進入你的大腦中。