Skip to content

Commit 72f3235

Browse files
author
Dominik Liebler
committed
PHP7 Bridge
1 parent d151e30 commit 72f3235

16 files changed

+790
-629
lines changed

Structural/Bridge/Assemble.php

Lines changed: 0 additions & 11 deletions
This file was deleted.

Structural/Bridge/Car.php

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace DesignPatterns\Structural\Bridge;
4+
5+
interface FormatterInterface
6+
{
7+
public function format(string $text);
8+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace DesignPatterns\Structural\Bridge;
4+
5+
class HelloWorldService extends Service
6+
{
7+
public function get()
8+
{
9+
return $this->implementation->format('Hello World');
10+
}
11+
}

Structural/Bridge/HtmlFormatter.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace DesignPatterns\Structural\Bridge;
4+
5+
class HtmlFormatter implements FormatterInterface
6+
{
7+
public function format(string $text)
8+
{
9+
return sprintf('<p>%s</p>', $text);
10+
}
11+
}

Structural/Bridge/Motorcycle.php

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace DesignPatterns\Structural\Bridge;
4+
5+
class PlainTextFormatter implements FormatterInterface
6+
{
7+
public function format(string $text)
8+
{
9+
return $text;
10+
}
11+
}

Structural/Bridge/Produce.php

Lines changed: 0 additions & 14 deletions
This file was deleted.

Structural/Bridge/README.rst

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,33 @@ Code
2525

2626
You can also find these code on `GitHub`_
2727

28-
Workshop.php
28+
FormatterInterface.php
2929

30-
.. literalinclude:: Workshop.php
30+
.. literalinclude:: FormatterInterface.php
3131
:language: php
3232
:linenos:
3333

34-
Assemble.php
34+
PlainTextFormatter.php
3535

36-
.. literalinclude:: Assemble.php
36+
.. literalinclude:: PlainTextFormatter.php
3737
:language: php
3838
:linenos:
3939

40-
Produce.php
40+
HtmlFormatter.php
4141

42-
.. literalinclude:: Produce.php
42+
.. literalinclude:: HtmlFormatter.php
4343
:language: php
4444
:linenos:
4545

46-
Vehicle.php
46+
Service.php
4747

48-
.. literalinclude:: Vehicle.php
48+
.. literalinclude:: Service.php
4949
:language: php
5050
:linenos:
5151

52-
Motorcycle.php
52+
HelloWorldService.php
5353

54-
.. literalinclude:: Motorcycle.php
55-
:language: php
56-
:linenos:
57-
58-
Car.php
59-
60-
.. literalinclude:: Car.php
54+
.. literalinclude:: HelloWorldService.php
6155
:language: php
6256
:linenos:
6357

Structural/Bridge/Service.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace DesignPatterns\Structural\Bridge;
4+
5+
abstract class Service
6+
{
7+
/**
8+
* @var FormatterInterface
9+
*/
10+
protected $implementation;
11+
12+
/**
13+
* @param FormatterInterface $printer
14+
*/
15+
public function __construct(FormatterInterface $printer)
16+
{
17+
$this->implementation = $printer;
18+
}
19+
20+
/**
21+
* @param FormatterInterface $printer
22+
*/
23+
public function setImplementation(FormatterInterface $printer)
24+
{
25+
$this->implementation = $printer;
26+
}
27+
28+
abstract public function get();
29+
}

Structural/Bridge/Tests/BridgeTest.php

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,19 @@
22

33
namespace DesignPatterns\Structural\Bridge\Tests;
44

5-
use DesignPatterns\Structural\Bridge\Assemble;
6-
use DesignPatterns\Structural\Bridge\Car;
7-
use DesignPatterns\Structural\Bridge\Motorcycle;
8-
use DesignPatterns\Structural\Bridge\Produce;
5+
use DesignPatterns\Structural\Bridge\HelloWorldService;
6+
use DesignPatterns\Structural\Bridge\HtmlFormatter;
7+
use DesignPatterns\Structural\Bridge\PlainTextFormatter;
98

109
class BridgeTest extends \PHPUnit_Framework_TestCase
1110
{
12-
public function testCar()
11+
public function testCanPrintUsingThePlainTextPrinter()
1312
{
14-
$vehicle = new Car(new Produce(), new Assemble());
15-
$this->expectOutputString('Car Produced Assembled');
16-
$vehicle->manufacture();
17-
}
13+
$service = new HelloWorldService(new PlainTextFormatter());
14+
$this->assertEquals('Hello World', $service->get());
1815

19-
public function testMotorcycle()
20-
{
21-
$vehicle = new Motorcycle(new Produce(), new Assemble());
22-
$this->expectOutputString('Motorcycle Produced Assembled');
23-
$vehicle->manufacture();
16+
// now change the implemenation and use the HtmlFormatter instead
17+
$service->setImplementation(new HtmlFormatter());
18+
$this->assertEquals('<p>Hello World</p>', $service->get());
2419
}
2520
}

Structural/Bridge/Vehicle.php

Lines changed: 0 additions & 20 deletions
This file was deleted.

Structural/Bridge/Workshop.php

Lines changed: 0 additions & 11 deletions
This file was deleted.

Structural/Bridge/uml/Bridge.uml

Lines changed: 40 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,40 @@
1-
<?xml version="1.0" encoding="UTF-8"?>
2-
<Diagram>
3-
<ID>PHP</ID>
4-
<OriginalElement>\DesignPatterns\Structural\Bridge\Vehicle</OriginalElement>
5-
<nodes>
6-
<node x="53.5" y="272.0">\DesignPatterns\Structural\Bridge\Workshop</node>
7-
<node x="290.0" y="159.0">\DesignPatterns\Structural\Bridge\Car</node>
8-
<node x="107.0" y="369.0">\DesignPatterns\Structural\Bridge\Produce</node>
9-
<node x="0.0" y="159.0">\DesignPatterns\Structural\Bridge\Motorcycle</node>
10-
<node x="0.0" y="369.0">\DesignPatterns\Structural\Bridge\Assemble</node>
11-
<node x="187.5" y="0.0">\DesignPatterns\Structural\Bridge\Vehicle</node>
12-
</nodes>
13-
<notes />
14-
<edges>
15-
<edge source="\DesignPatterns\Structural\Bridge\Car" target="\DesignPatterns\Structural\Bridge\Vehicle">
16-
<point x="0.0" y="-34.0" />
17-
<point x="425.0" y="134.0" />
18-
<point x="326.25" y="134.0" />
19-
<point x="46.25" y="54.5" />
20-
</edge>
21-
<edge source="\DesignPatterns\Structural\Bridge\Assemble" target="\DesignPatterns\Structural\Bridge\Workshop">
22-
<point x="0.0" y="-23.5" />
23-
<point x="43.5" y="344.0" />
24-
<point x="75.25" y="344.0" />
25-
<point x="-21.75" y="23.5" />
26-
</edge>
27-
<edge source="\DesignPatterns\Structural\Bridge\Motorcycle" target="\DesignPatterns\Structural\Bridge\Vehicle">
28-
<point x="0.0" y="-34.0" />
29-
<point x="135.0" y="134.0" />
30-
<point x="233.75" y="134.0" />
31-
<point x="-46.25" y="54.5" />
32-
</edge>
33-
<edge source="\DesignPatterns\Structural\Bridge\Produce" target="\DesignPatterns\Structural\Bridge\Workshop">
34-
<point x="0.0" y="-23.5" />
35-
<point x="150.5" y="344.0" />
36-
<point x="118.75" y="344.0" />
37-
<point x="21.75" y="23.5" />
38-
</edge>
39-
</edges>
40-
<settings layout="Hierarchic Group" zoom="0.8853211009174312" x="280.0" y="208.0" />
41-
<SelectedNodes />
42-
<Categories>
43-
<Category>Fields</Category>
44-
<Category>Constants</Category>
45-
<Category>Constructors</Category>
46-
<Category>Methods</Category>
47-
</Categories>
48-
<VISIBILITY>private</VISIBILITY>
49-
</Diagram>
50-
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Diagram>
3+
<ID>PHP</ID>
4+
<OriginalElement>\DesignPatterns\Structural\Bridge\HtmlFormatter</OriginalElement>
5+
<nodes>
6+
<node x="-111.0" y="-111.0">\DesignPatterns\Structural\Bridge\PlainTextFormatter</node>
7+
<node x="-194.0" y="-212.0">\DesignPatterns\Structural\Bridge\FormatterInterface</node>
8+
<node x="88.0" y="-239.0">\DesignPatterns\Structural\Bridge\Service</node>
9+
<node x="121.0" y="-93.0">\DesignPatterns\Structural\Bridge\HelloWorldService</node>
10+
<node x="-278.0" y="-111.0">\DesignPatterns\Structural\Bridge\HtmlFormatter</node>
11+
</nodes>
12+
<notes />
13+
<edges>
14+
<edge source="\DesignPatterns\Structural\Bridge\HelloWorldService" target="\DesignPatterns\Structural\Bridge\Service">
15+
<point x="0.0" y="-25.5" />
16+
<point x="0.0" y="48.0" />
17+
</edge>
18+
<edge source="\DesignPatterns\Structural\Bridge\PlainTextFormatter" target="\DesignPatterns\Structural\Bridge\FormatterInterface">
19+
<point x="0.0" y="-25.5" />
20+
<point x="-35.5" y="-136.0" />
21+
<point x="-83.0" y="-136.0" />
22+
<point x="37.0" y="25.5" />
23+
</edge>
24+
<edge source="\DesignPatterns\Structural\Bridge\HtmlFormatter" target="\DesignPatterns\Structural\Bridge\FormatterInterface">
25+
<point x="0.0" y="-25.5" />
26+
<point x="-204.5" y="-136.0" />
27+
<point x="-157.0" y="-136.0" />
28+
<point x="-37.0" y="25.5" />
29+
</edge>
30+
</edges>
31+
<settings layout="Hierarchic Group" zoom="1.0" x="147.5" y="130.5" />
32+
<SelectedNodes />
33+
<Categories>
34+
<Category>Fields</Category>
35+
<Category>Constants</Category>
36+
<Category>Methods</Category>
37+
</Categories>
38+
<VISIBILITY>private</VISIBILITY>
39+
</Diagram>
40+

Structural/Bridge/uml/uml.png

24.2 KB
Loading

0 commit comments

Comments
 (0)