mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-07-30 19:50:12 +02:00
removed ...Interface suffix and added 2nd service to Bridge example
This commit is contained in:
8
Structural/Bridge/Formatter.php
Normal file
8
Structural/Bridge/Formatter.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
interface Formatter
|
||||
{
|
||||
public function format(string $text): string;
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
interface FormatterInterface
|
||||
{
|
||||
public function format(string $text);
|
||||
}
|
@@ -4,7 +4,7 @@ namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
class HelloWorldService extends Service
|
||||
{
|
||||
public function get()
|
||||
public function get(): string
|
||||
{
|
||||
return $this->implementation->format('Hello World');
|
||||
}
|
||||
|
@@ -2,9 +2,9 @@
|
||||
|
||||
namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
class HtmlFormatter implements FormatterInterface
|
||||
class HtmlFormatter implements Formatter
|
||||
{
|
||||
public function format(string $text)
|
||||
public function format(string $text): string
|
||||
{
|
||||
return sprintf('<p>%s</p>', $text);
|
||||
}
|
||||
|
11
Structural/Bridge/PingService.php
Normal file
11
Structural/Bridge/PingService.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
class PingService extends Service
|
||||
{
|
||||
public function get(): string
|
||||
{
|
||||
return $this->implementation->format('pong');
|
||||
}
|
||||
}
|
@@ -2,9 +2,9 @@
|
||||
|
||||
namespace DesignPatterns\Structural\Bridge;
|
||||
|
||||
class PlainTextFormatter implements FormatterInterface
|
||||
class PlainTextFormatter implements Formatter
|
||||
{
|
||||
public function format(string $text)
|
||||
public function format(string $text): string
|
||||
{
|
||||
return $text;
|
||||
}
|
||||
|
@@ -25,9 +25,9 @@ Code
|
||||
|
||||
You can also find this code on `GitHub`_
|
||||
|
||||
FormatterInterface.php
|
||||
Formatter.php
|
||||
|
||||
.. literalinclude:: FormatterInterface.php
|
||||
.. literalinclude:: Formatter.php
|
||||
:language: php
|
||||
:linenos:
|
||||
|
||||
@@ -55,6 +55,12 @@ HelloWorldService.php
|
||||
:language: php
|
||||
:linenos:
|
||||
|
||||
PingService.php
|
||||
|
||||
.. literalinclude:: PingService.php
|
||||
:language: php
|
||||
:linenos:
|
||||
|
||||
Test
|
||||
----
|
||||
|
||||
|
@@ -5,25 +5,25 @@ namespace DesignPatterns\Structural\Bridge;
|
||||
abstract class Service
|
||||
{
|
||||
/**
|
||||
* @var FormatterInterface
|
||||
* @var Formatter
|
||||
*/
|
||||
protected $implementation;
|
||||
|
||||
/**
|
||||
* @param FormatterInterface $printer
|
||||
* @param Formatter $printer
|
||||
*/
|
||||
public function __construct(FormatterInterface $printer)
|
||||
public function __construct(Formatter $printer)
|
||||
{
|
||||
$this->implementation = $printer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FormatterInterface $printer
|
||||
* @param Formatter $printer
|
||||
*/
|
||||
public function setImplementation(FormatterInterface $printer)
|
||||
public function setImplementation(Formatter $printer)
|
||||
{
|
||||
$this->implementation = $printer;
|
||||
}
|
||||
|
||||
abstract public function get();
|
||||
abstract public function get(): string;
|
||||
}
|
||||
|
@@ -9,13 +9,17 @@ use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BridgeTest extends TestCase
|
||||
{
|
||||
public function testCanPrintUsingThePlainTextPrinter()
|
||||
public function testCanPrintUsingThePlainTextFormatter()
|
||||
{
|
||||
$service = new HelloWorldService(new PlainTextFormatter());
|
||||
$this->assertSame('Hello World', $service->get());
|
||||
|
||||
// now change the implementation and use the HtmlFormatter instead
|
||||
$service->setImplementation(new HtmlFormatter());
|
||||
$this->assertSame('Hello World', $service->get());
|
||||
}
|
||||
|
||||
public function testCanPrintUsingTheHtmlFormatter()
|
||||
{
|
||||
$service = new HelloWorldService(new HtmlFormatter());
|
||||
|
||||
$this->assertSame('<p>Hello World</p>', $service->get());
|
||||
}
|
||||
}
|
||||
|
@@ -1,38 +1,48 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Diagram>
|
||||
<ID>PHP</ID>
|
||||
<OriginalElement>\DesignPatterns\Structural\Bridge\HtmlFormatter</OriginalElement>
|
||||
<OriginalElement>\DesignPatterns\Structural\Bridge\Service</OriginalElement>
|
||||
<nodes>
|
||||
<node x="-111.0" y="-111.0">\DesignPatterns\Structural\Bridge\PlainTextFormatter</node>
|
||||
<node x="-194.0" y="-212.0">\DesignPatterns\Structural\Bridge\FormatterInterface</node>
|
||||
<node x="88.0" y="-239.0">\DesignPatterns\Structural\Bridge\Service</node>
|
||||
<node x="121.0" y="-93.0">\DesignPatterns\Structural\Bridge\HelloWorldService</node>
|
||||
<node x="-278.0" y="-111.0">\DesignPatterns\Structural\Bridge\HtmlFormatter</node>
|
||||
<node x="151.0" y="366.0">\DesignPatterns\Structural\Bridge\PlainTextFormatter</node>
|
||||
<node x="79.75" y="265.0">\DesignPatterns\Structural\Bridge\Formatter</node>
|
||||
<node x="33.75" y="0.0">\DesignPatterns\Structural\Bridge\Service</node>
|
||||
<node x="164.0" y="169.0">\DesignPatterns\Structural\Bridge\PingService</node>
|
||||
<node x="0.0" y="169.0">\DesignPatterns\Structural\Bridge\HelloWorldService</node>
|
||||
<node x="0.0" y="366.0">\DesignPatterns\Structural\Bridge\HtmlFormatter</node>
|
||||
</nodes>
|
||||
<notes />
|
||||
<edges>
|
||||
<edge source="\DesignPatterns\Structural\Bridge\HelloWorldService" target="\DesignPatterns\Structural\Bridge\Service">
|
||||
<point x="0.0" y="-25.5" />
|
||||
<point x="0.0" y="48.0" />
|
||||
<point x="72.0" y="144.0" />
|
||||
<point x="88.75" y="144.0" />
|
||||
<point x="-55.0" y="59.5" />
|
||||
</edge>
|
||||
<edge source="\DesignPatterns\Structural\Bridge\PlainTextFormatter" target="\DesignPatterns\Structural\Bridge\FormatterInterface">
|
||||
<edge source="\DesignPatterns\Structural\Bridge\PingService" target="\DesignPatterns\Structural\Bridge\Service">
|
||||
<point x="0.0" y="-25.5" />
|
||||
<point x="-35.5" y="-136.0" />
|
||||
<point x="-83.0" y="-136.0" />
|
||||
<point x="37.0" y="25.5" />
|
||||
<point x="215.5" y="144.0" />
|
||||
<point x="198.75" y="144.0" />
|
||||
<point x="55.0" y="59.5" />
|
||||
</edge>
|
||||
<edge source="\DesignPatterns\Structural\Bridge\HtmlFormatter" target="\DesignPatterns\Structural\Bridge\FormatterInterface">
|
||||
<edge source="\DesignPatterns\Structural\Bridge\HtmlFormatter" target="\DesignPatterns\Structural\Bridge\Formatter">
|
||||
<point x="0.0" y="-25.5" />
|
||||
<point x="-204.5" y="-136.0" />
|
||||
<point x="-157.0" y="-136.0" />
|
||||
<point x="-37.0" y="25.5" />
|
||||
<point x="65.5" y="341.0" />
|
||||
<point x="112.5" y="341.0" />
|
||||
<point x="-32.75" y="25.5" />
|
||||
</edge>
|
||||
<edge source="\DesignPatterns\Structural\Bridge\PlainTextFormatter" target="\DesignPatterns\Structural\Bridge\Formatter">
|
||||
<point x="0.0" y="-25.5" />
|
||||
<point x="225.0" y="341.0" />
|
||||
<point x="178.0" y="341.0" />
|
||||
<point x="32.75" y="25.5" />
|
||||
</edge>
|
||||
</edges>
|
||||
<settings layout="Hierarchic Group" zoom="1.0" x="147.5" y="130.5" />
|
||||
<settings layout="Hierarchic Group" zoom="1.0" x="144.5" y="130.5" />
|
||||
<SelectedNodes />
|
||||
<Categories>
|
||||
<Category>Fields</Category>
|
||||
<Category>Constants</Category>
|
||||
<Category>Constructors</Category>
|
||||
<Category>Methods</Category>
|
||||
</Categories>
|
||||
<VISIBILITY>private</VISIBILITY>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 67 KiB |
Reference in New Issue
Block a user