-
Notifications
You must be signed in to change notification settings - Fork 4
/
bridge.php
82 lines (71 loc) · 1.56 KB
/
bridge.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
/**
* Bridge Pattern example
*
* @author Christian Bergau <[email protected]>
* @copyright Free for all
* @link http://en.wikipedia.org/wiki/Bridge_pattern
*/
interface DrawingAPI
{
public function drawCircle($x, $y, $radius);
}
class DrawingAPI1 implements DrawingAPI
{
public function drawCircle($x, $y, $radius)
{
echo "API1.circle at " . $x . ":" . $y . " radius " . $radius . "<br/>";
}
}
class DrawingAPI2 implements DrawingAPI
{
public function drawCircle($x, $y, $radius)
{
echo "API2.circle at " . $x . ":" . $y . " radius " . $radius . "<br/>";
}
}
abstract class Shape
{
protected $drawingAPI;
protected function Shape(DrawingAPI $drawingAPI)
{
$this->drawingAPI = $drawingAPI;
}
}
class CircleShape extends Shape
{
private $x;
private $y;
private $radius;
public function CircleShape(
$x,
$y,
$radius,
DrawingAPI $drawingAPI
) {
parent::Shape($drawingAPI);
$this->x = $x;
$this->y = $y;
$this->radius = $radius;
}
public function draw()
{
$this->drawingAPI->drawCircle(
$this->x,
$this->y,
$this->radius
);
}
public function resizeByPercentage($percentage)
{
$this->radius *= $percentage;
}
}
$shapes = array(
new CircleShape(1, 3, 7, new DrawingAPI1()),
new CircleShape(5, 7, 11, new DrawingAPI2()),
);
foreach ($shapes as $shape) {
$shape->resizeByPercentage(2.5);
$shape->draw();
}