php設(shè)計模式 觀察者模式,設(shè)計模式觀察者_PHP教程
Jul 12, 2016 am 08:58 AMphp設(shè)計模式 觀察者模式,設(shè)計模式觀察者
觀察者模式的核心是把客戶元素(觀察者)從一個中心類(主體)中分離開來。當主體知道事件發(fā)生時,觀察者需要被通知到。同時,我們并不希望將主體與觀察者之間的關(guān)系進行硬編碼。為了達到這個目的,我們可以允許觀察者在主體上進行注冊。
觀察者模式實現(xiàn)了低耦合、非侵入式的通知與更新機制。
場景:當一個事件發(fā)生后,要執(zhí)行一連串更新操作。
<span>EventGenerator</span>.php
<?<span>php namespace Baobab; </span><span>/*</span><span>* * Class EventGenerator 基類,事件發(fā)生者 </span><span>*/</span> <span>abstract</span> <span>class</span><span> EventGenerator{ </span><span>//</span><span>觀察者對于事件發(fā)生者是不可見的,事件發(fā)生者不關(guān)心有哪些觀察者關(guān)注了事件</span> <span>private</span> <span>$observers</span> = <span>array</span><span>(); </span><span>/*</span><span>* * 添加觀察者 </span><span>*/</span> <span>function</span> addObserver(Observer <span>$observer</span><span>){ </span><span>$this</span>->observers[] = <span>$observer</span><span>; } </span><span>/*</span><span>* *逐個通知觀察者進行更新的操作 </span><span>*/</span> <span>function</span><span> notify(){ </span><span>foreach</span>(<span>$this</span>->observers <span>as</span> <span>$observer</span><span>){ </span><span>$observer</span>-><span>update(); } } }</span>
<span>Observer</span>.php
<?<span>php namespace Baobab; </span><span>/*</span><span>* * Class Observer 觀察者,觀察的對象是事件發(fā)生者 * @package Baobab </span><span>*/</span> <span>interface</span><span> Observer{ </span><span>/*</span><span>* * @param null $event_info 事件的信息 * 表示事件發(fā)生后進行更新的操作 </span><span>*/</span> <span>function</span> update(<span>$event_info</span> = <span>null</span><span>); }</span>
index.php
<span>class</span> Event <span>extends</span><span> \Baobab\EventGenerator{ </span><span>/*</span><span>* *觸發(fā)一個新的事件 </span><span>*/</span> <span>function</span><span> trigger(){ </span><span>echo</span> 'Event發(fā)生'<span>; </span><span>$this</span>-><span>notify(); } } </span><span>/*</span><span>* * 觀察者1 </span><span>*/</span> <span>class</span> Observer1 <span>implements</span><span> \Baobab\Observer{ </span><span>function</span> Update(<span>$event_info</span> = <span>null</span><span>){ </span><span>echo</span> '更新操作代碼1'<span>; } }<br /> <span>/*<span>* <br /> * 觀察者2 <br /><span> */</span></span></span> </span><span>class</span> Observer2 <span>implements</span><span> \Baobab\Observer{ </span><span>function</span> Update(<span>$event_info</span> = <span>null</span><span>){ </span><span>echo</span> '更新操作代碼2'<span>; } } </span><span>$event</span> = <span>new</span><span> Event(); </span><span>$event</span>->addObserver(<span>new</span><span> Observer1()); </span><span>$event</span>->addObserver(<span>new</span><span> Observer2()); </span><span>$event</span>->trigger();
?

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

Java ??????? ??? ??? ???? ??? ???? ??? ??? ???? ??(?: ??? ??) ?? ?? ??? ??? ?? ????? ???? ???? ??? ?? ???? ???? ????? ????. ???? ??? ???? ????? ?? ??? ?? ??? ?? ? ?? ??? ??? ?? ??? ??? ?? ?? ??? ?????.

TDD? ??? PHP ??? ???? ? ?????. ???? ??? ?? ??, ?? ?? ?? ? ?? ???? ?????. ??? ???? ?? ?? ?? ??? ???? ????? ??? ?????. ??? ???? ??? ? ??? ????? ?????? ???, ?? ??? ? ???? ??????.

Guice ?????? ??? ??? ??? ??? ??? ?????. ??? ??: @Singleton ??? ?? ???? ????? ??? ??? ?????. ??? ??? ??: @Provides ??? ?? ??? ???? ???? ??? ?? ?? ?? ????? ????. ?? ??: ????? ??? ?? ???? ????? @Named ??? ?? ?? ??? ?????.

????? ??? ?? ???? ???? ??? ?? ??? ???? ??? ? ?? ??? ??? ?????. ?? ????, ???? ????, ?? ?????, ???? ?????? ??? ?? ????, ???? ??? ?? ??? ??? ???? ??? ? ????. ? ???? ??? ?? ?????? ? $2.29? ???? Espresso? ???? ??? ??? ???? ???? ????? ??? ?? ?????.

SpringMVC ?????? ?? ??? ??? ?????: 1. ??? ??: Spring ????? ?????. 2. Facade ??: ????, ? ? ?? ?? ??? ?????. 3. ?? ??: ??? ???? ?? ???? ?????. : ?????? ???? ???? ?????. ??? ??? ??? SpringMVC? ??? ???? ???? ???? ????? ?? ?? ??? ??????? ?? ? ??? ???.

Java ??????? ??? ??? ???? ??? ?? ???, ?? ??? ? ???? ????? ??? ????. ????? ???, ?? ????, ??? ???? ?? ??? ?? ?? ?? ????. ?? ??: ??? ??? ??? ?? ???? ? ?????. ??? ??? ???? ???? ??? ???? ??? ??????.

PHP ??? ??? ????? ??? ???? ??? ?? ??? ???? ?????. ???? ?? ???? ?? ??(?: ??? ??? ??), ??? ??(?: ????? ??) ? ?? ??(?: ??? ??)? ?????. ??? ??? ???? ??? ????, ?? ???? ????, ???? ??? ? ?? ?????. ????? ????? ??? ??? ????? ?? ?? ?? ?? ????? ??? ? ????. ????? PHP ??? ??? ???? ?? ???? ?? ?? ??? ??????? ??? ? ??? ?????.

TDD ? ??? ??? ?? ??? ?? ???? ??????. TDD? ??? ?? ??? ???? ?? ???? ????? ?? ??? ??????. ??? ??? ??? ?? ? ?? ???? ?? ??? ?? TDD? ???? ???? ?????? ??? ?? ??? ????? ?????. ?? ????, ?? ??? ? ?? ??? ??? ?? ?? ???? ?? ??? ??????.
