<?php
/*
* 觀察者模式
* 其實觀察者模式這是一種較爲容易去理解的一種模式吧,它是一種事件系統,意味着這一模式允許某個類觀察另一個類的狀態,當被觀察的類狀態發生改變的時候,觀察類可以收到通知並且做出相應的動作;觀察者模式爲您提供了避免組件之間緊密耦合的另一種方法
* */
// 部隊兵種的接口
interface Arms
{
public function dispatched();
}
// 部隊上的總指揮部的接口
interface Subject
{
public function register( Arms $arms );
public function notify();
}
/**
* Class Action
*
* @describe 定義一個司令部類 如果收到了偵察兵的消息就殲滅敵軍
*
* @author nick
*
*/
class Action implements Subject
{
// 打這場戰咱們有多少部隊都告訴我 讓我統計一下
public $_observers = array(); // hi 哥們 你來統計一下兵種
public function register( Arms $observer )
{
$this->_observers[] = $observer;
}
public function notify()
{
foreach ( $this->_observers as $observer ) {
$observer->dispatched();
}
}
}
//核導彈部隊
class NuclearMissileForce implements Arms
{
public function dispatched()
{
echo '發射核導彈,正中目標!' . '<hr>';
}
}
//戰鬥機部隊
class Jagdwaffe implements Arms
{
public function dispatched()
{
echo '空中轟炸機部隊已經出動!' . '<hr>';
}
}
//地面特種兵
class GroundSpecialForces implements Arms
{
public function dispatched()
{
echo '地面特種部隊正在殲滅敵軍!' . '<hr>';
}
}
/**
* Class Sentry
*
* @describe 哨兵類 負責通知司令部
*
* @author nick
*
*/
class Sentry
{
private $action;
public function __construct()
{
$this->action = new Action();
}
// 統計部隊上報司令部
public function ReportToHeadquarters()
{
$this->action->register(new NuclearMissileForce());
$this->action->register(new Jagdwaffe());
$this->action->register(new GroundSpecialForces());
}
// 發現敵軍 開始戰鬥
public function notifyAction()
{
$this->ReportToHeadquarters();
$this->action->notify();
}
}
$obj = new Sentry();
$obj->notifyAction();
PHP設計模式之-----觀察者模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.