-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBridge.php
74 lines (62 loc) · 1.42 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
<?php
namespace DesignPatterns\Structural;
/**
* Here we have the WebPages hierarchy.
* WebPage delegates colors and styles to its theme object
*/
abstract class WebPage
{
protected $theme;
public function __construct(Theme $theme)
{
$this->theme = $theme;
}
abstract public function getContent(): string;
}
class HomePage extends WebPage
{
public function getContent(): string
{
return "Home page in " . $this->theme->getColor();
}
}
class AboutPage extends WebPage
{
public function getContent(): string
{
return "About page in " . $this->theme->getColor();
}
}
/**
* Separate themes hierarchy.
* You can extend themes hierarchy independently from pages classes
*/
interface Theme
{
public function getColor();
}
/**
* Themes follow the common interface. It makes them
* compatible with all types of pages.
*/
class DarkTheme implements Theme
{
public function getColor()
{
return 'Dark colors' . PHP_EOL;
}
}
class LightTheme implements Theme
{
public function getColor()
{
return 'White colors'. PHP_EOL;
}
}
# Client code example
$darkTheme = new DarkTheme();
$homePage = new HomePage($darkTheme);
echo $homePage->getContent(); // Output: Home page in Dark colors
$lightTheme = new LightTheme();
$aboutPage = new AboutPage($lightTheme);
echo $aboutPage->getContent(); // Output: About page in White colors