Decouple an abstraction from its implementation so that the two can vary independently.
You can also find this code on GitHub
Formatter.php
.. literalinclude:: Formatter.php :language: php :linenos:
PlainTextFormatter.php
.. literalinclude:: PlainTextFormatter.php :language: php :linenos:
HtmlFormatter.php
.. literalinclude:: HtmlFormatter.php :language: php :linenos:
Service.php
.. literalinclude:: Service.php :language: php :linenos:
HelloWorldService.php
.. literalinclude:: HelloWorldService.php :language: php :linenos:
PingService.php
.. literalinclude:: PingService.php :language: php :linenos:
Tests/BridgeTest.php
.. literalinclude:: Tests/BridgeTest.php :language: php :linenos: