-
Notifications
You must be signed in to change notification settings - Fork 4
/
structural-bridge.php
136 lines (117 loc) · 2.67 KB
/
structural-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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/**
* This example just to simulate how Bridge can be work
* 2nees.com
*/
/**
* Abstraction Part for handling one of two hierarchies of classes
* 2nees.com
*/
abstract class Shape
{
private string $name;
protected Color $color;
public function __construct(Color $color)
{
$this->changeColorRenderer($color);
}
public function changeColorRenderer(Color $color): void
{
$this->color = $color;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
abstract public function shapeDetails(): void;
}
/**
* Concrete Abstraction represents Circle
* 2nees.com
*/
class Circle extends Shape
{
public function __construct(Color $color)
{
parent::__construct($color);
$this->setName("Circle");
}
public function shapeDetails(): void
{
echo "{$this->getName()} Filled with this color: {$this->color->getFillColor()}" . PHP_EOL;
}
}
/**
* Concrete Abstraction represents Rect
* 2nees.com
*/
class Rect extends Shape
{
public function __construct(Color $color)
{
parent::__construct($color);
$this->setName("Rect");
}
public function shapeDetails(): void
{
echo "{$this->getName()} Filled with this color: {$this->color->getFillColor()} With Border Color: {$this->color->getBorderColor()}" . PHP_EOL;
}
}
/**
* The Implementation Part for declare needed method which can access via Abstraction
* Interface Color
*/
interface Color
{
public function getFillColor(): string;
public function getBorderColor(): string;
}
/**
* Concrete Implementation render Red Colors
* 2nees.com
*/
class Red implements Color
{
public function getFillColor(): string
{
return "#ff0000";
}
public function getBorderColor(): string
{
return "#000000";
}
}
/**
* Concrete Implementation render Blue Colors
* 2nees.com
*/
class Blue implements Color
{
public function getFillColor(): string
{
return "#0000ff";
}
public function getBorderColor(): string
{
return "#ffff00";
}
}
// Call Concrete Implementation To Passing it to Concrete Abstraction
$redColor = new Red();
$blueColor = new Blue();
// Create Circle
$myCircleShape = new Circle($redColor);
$myCircleShape->shapeDetails();
// Change Color on Run time
$myCircleShape->changeColorRenderer($blueColor);
$myCircleShape->shapeDetails();
// Create Rect
$myRectShape = new Rect($redColor);
$myRectShape->shapeDetails();
// Change Rect on Run time
$myRectShape->changeColorRenderer($blueColor);
$myRectShape->shapeDetails();