PHP設計モードシリーズ-オブザーバーモード
シーンデザイン
受注クラスの設計
オーダー作成が完了すると、EMAILを送信したり、オーダーのステータスを変更したりするなど、さまざまなアクションが行われます.
元の方法は、これらの操作をcreate関数に書くことです.
しかし、受注作成クラスが膨大になるにつれて、このような操作は需要と急速な変動を満たすことができません.
この時、観察者パターンが現れました.
コード設計:
<?php
// , 。
// , WEB , , 。
//
class order {
protected $observers = array(); //
//
public function addObServer($type, $observer) {
$this->observers[$type][] = $observer;
}
//
public function obServer($type) {
if (isset($this->observers[$type])) {
foreach ($this->observers[$type] as $obser) {
$a = new $obser;
$a->update($this); //
}
}
}
//
public function create() {
echo ' ';
$this->obServer('buy'); // buy
}
}
class orderEmail {
public static function update($order) {
echo ' ';
}
}
class orderStatus {
public static function update($order) {
echo ' ';
}
}
$ob = new order;
$ob->addObServer('buy', 'orderEmail');
$ob->addObServer('buy', 'orderStatus');
$ob->create();
参考:『PHPデザインモード』Aaron Saray著