mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-04-30 11:47:54 +02:00
60 lines
1.3 KiB
ReStructuredText
60 lines
1.3 KiB
ReStructuredText
`Chain Of Responsibilities`__
|
|
=============================
|
|
|
|
Purpose
|
|
--------
|
|
|
|
To build a chain of objects to handle a call in sequential order. If one
|
|
object cannot handle a call, it delegates the call to the next in the
|
|
chain and so forth.
|
|
|
|
Examples
|
|
---------
|
|
|
|
- logging framework, where each chain element decides autonomously what
|
|
to do with a log message
|
|
- a Spam filter
|
|
- Caching: first object is an instance of e.g. a Memcached Interface,
|
|
if that "misses" it delegates the call to the database interface
|
|
|
|
UML Diagram
|
|
-----------
|
|
|
|
.. image:: uml/uml.png
|
|
:alt: Alt ChainOfResponsibility UML Diagram
|
|
:align: center
|
|
|
|
Code
|
|
----
|
|
|
|
You can also find this code on `GitHub`_
|
|
|
|
Handler.php
|
|
|
|
.. literalinclude:: Handler.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
Responsible/FastStorage.php
|
|
|
|
.. literalinclude:: Responsible/HttpInMemoryCacheHandler.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
Responsible/SlowStorage.php
|
|
|
|
.. literalinclude:: Responsible/SlowDatabaseHandler.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
Test
|
|
----
|
|
|
|
Tests/ChainTest.php
|
|
|
|
.. literalinclude:: Tests/ChainTest.php
|
|
:language: php
|
|
:linenos:
|
|
|
|
.. _`GitHub`: https://github.com/DesignPatternsPHP/DesignPatternsPHP/tree/main/Behavioral/ChainOfResponsibilities
|
|
.. __: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern |