mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-02-24 17:52:25 +01:00
59 lines
1.0 KiB
ReStructuredText
59 lines
1.0 KiB
ReStructuredText
`Observer`__
|
|
============
|
|
|
|
Purpose
|
|
-------
|
|
|
|
To implement a publish/subscribe behaviour to an object, whenever a
|
|
"Subject" object changes its state, the attached "Observers" will be
|
|
notified. It is used to shorten the amount of coupled objects and uses
|
|
loose coupling instead.
|
|
|
|
Examples
|
|
--------
|
|
|
|
- a message queue system is observed to show the progress of a job in a
|
|
GUI
|
|
|
|
Note
|
|
----
|
|
|
|
PHP already defines two interfaces that can help to implement this
|
|
pattern: SplObserver and SplSubject.
|
|
|
|
UML Diagram
|
|
-----------
|
|
|
|
.. image:: uml/uml.png
|
|
:alt: Alt Observer UML Diagram
|
|
:align: center
|
|
|
|
Code
|
|
----
|
|
|
|
You can also find these code on `GitHub`_
|
|
|
|
User.php
|
|
|
|
.. literalinclude:: User.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
UserObserver.php
|
|
|
|
.. literalinclude:: UserObserver.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
Test
|
|
----
|
|
|
|
Tests/ObserverTest.php
|
|
|
|
.. literalinclude:: Tests/ObserverTest.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Observer
|
|
.. __: http://en.wikipedia.org/wiki/Observer_pattern
|