-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcreational-abstract-factory.php
138 lines (118 loc) · 2.85 KB
/
creational-abstract-factory.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
137
138
<?php
/**
* This is AbstractFactory interface
* 2nees.com
*/
interface FurnitureFactory
{
public function createChair(): Chair;
public function createSofa(): Sofa;
public function createServiceTable(): ServiceTable;
}
/**
* Produce the Object Family - Modern Family
* 2nees.com
*/
class ModernDesign implements FurnitureFactory
{
public function createChair(): Chair
{
return new ModernChair();
}
public function createSofa(): Sofa
{
return new ModernSofa();
}
public function createServiceTable(): ServiceTable
{
return new ModernServiceTable();
}
}
/**
* Produce the Object Family - Classical Family
* 2nees.com
*/
class ClassicalDesign implements FurnitureFactory
{
public function createChair(): Chair
{
return new ClassicalChair();
}
public function createSofa(): Sofa
{
return new ClassicalSofa();
}
public function createServiceTable(): ServiceTable
{
return new ClassicalServiceTable();
}
}
/**
* Interface Chair, Sofa, ServiceTable is the Abstract Product
** and all variants of the product must implement this interface
* 2nees.com
*/
interface Chair {
public function getChairName() : string;
}
interface Sofa {
public function getSofaName() : string;
}
interface ServiceTable {
public function getServiceTableName() : string;
}
/**
* Classes ModernChair, ModernSofa, ModernServiceTable, ClassicalChair, ClassicalSofa, ClassicalServiceTable
* Various implementations of abstract products
* 2nees.com
*/
class ModernChair implements Chair {
public function getChairName(): string
{
return "Modern Chair Name";
}
}
class ModernSofa implements Sofa {
public function getSofaName(): string
{
return "Modern Sofa Name";
}
}
class ModernServiceTable implements ServiceTable {
public function getServiceTableName(): string
{
return "Modern Service Table Name";
}
}
class ClassicalChair implements Chair {
public function getChairName(): string
{
return "Classical Chair Name";
}
}
class ClassicalSofa implements Sofa {
public function getSofaName(): string
{
return "Classical Sofa Name";
}
}
class ClassicalServiceTable implements ServiceTable {
public function getServiceTableName(): string
{
return "Classical Service Table Name";
}
}
/**
* Client Function to print test result code
* @param FurnitureFactory $factory
*/
function clientCode(FurnitureFactory $factory){
echo "
{$factory->createChair()->getChairName()}\n
{$factory->createSofa()->getSofaName()}\n
{$factory->createServiceTable()->getServiceTableName()}\n
=================================================== \n
";
}
clientCode(new ModernDesign());
clientCode(new ClassicalDesign());