2023-09-27 10:21:07 +03:00

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