File tree Expand file tree Collapse file tree 2 files changed +132
-0
lines changed Expand file tree Collapse file tree 2 files changed +132
-0
lines changed Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ /**
4
+ * Design pattern "Multiton" (Creational)
5
+ * This is demo code
6
+ * See for details: http://maxsite.org/page/php-patterns
7
+ */
8
+
9
+ /**
10
+ * Base
11
+ */
12
+ trait MultitonTrait
13
+ {
14
+ private static $ list = [];
15
+
16
+ public static function getInstance (string $ instance = 'default ' )
17
+ {
18
+ if (empty (self ::$ list [$ instance ])) self ::$ list [$ instance ] = new static ();
19
+
20
+ return self ::$ list [$ instance ];
21
+ }
22
+
23
+ private function __construct ()
24
+ {
25
+ }
26
+ private function __clone ()
27
+ {
28
+ }
29
+ private function __wakeup ()
30
+ {
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Class for sample
36
+ */
37
+ class Foo
38
+ {
39
+ /**
40
+ * Add MultitonTrait to this class
41
+ */
42
+ use MultitonTrait;
43
+
44
+ /**
45
+ * Class's own methods...
46
+ */
47
+ private $ var = [];
48
+
49
+ public function addVal ($ v )
50
+ {
51
+ $ this ->var [] = $ v ;
52
+ }
53
+
54
+ public function getVal ()
55
+ {
56
+ return $ this ->var ;
57
+ }
58
+ }
59
+
60
+
61
+ /**
62
+ * demo use
63
+ * see Singleton for other samples
64
+ */
65
+
66
+ echo '<pre> ' ; // for print in browser
67
+
68
+ # $foo = new Foo(); // Error: Call to private Foo::__construct()
69
+
70
+ /**
71
+ * get instance "Alpha"
72
+ */
73
+ $ foo1 = Foo::getInstance ('Alpha ' );
74
+
75
+ /**
76
+ * add values
77
+ */
78
+ $ foo1 ->addVal ('first ' );
79
+ $ foo1 ->addVal ('second ' );
80
+
81
+ /**
82
+ * control
83
+ */
84
+ print_r ($ foo1 ->getVal ());
85
+ /*
86
+ Array
87
+ (
88
+ [0] => first
89
+ [1] => second
90
+ )
91
+ */
92
+
93
+ /**
94
+ * new instance "Beta"
95
+ */
96
+ $ foo2 = Foo::getInstance ('Beta ' );
97
+ $ foo2 ->addVal ('1000 ' );
98
+ $ foo2 ->addVal ('2000 ' );
99
+
100
+ /**
101
+ * control
102
+ */
103
+ print_r ($ foo2 ->getVal ());
104
+ /*
105
+ Array
106
+ (
107
+ [0] => 1000
108
+ [1] => 2000
109
+ )
110
+ */
111
+
112
+ /**
113
+ * new instance "default"
114
+ */
115
+ $ foo3 = Foo::getInstance ();
116
+ $ foo3 ->addVal ('Abcde ' );
117
+ $ foo3 ->addVal ('12345 ' );
118
+
119
+ /**
120
+ * control
121
+ */
122
+ print_r ($ foo3 ->getVal ());
123
+ /*
124
+ Array
125
+ (
126
+ [0] => Abcde
127
+ [1] => 12345
128
+ )
129
+ */
130
+
131
+ # end of file
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ See details on http://maxsite.org/page/php-patterns
7
7
* "Factory method" / "Virtual Constructor" (Creational)
8
8
* "Abstract factory" (Creational)
9
9
* "Singleton" (Creational)
10
+ * "Multiton" (Creational)
10
11
11
12
12
13
(c) MaxSite.org, 2019, http://maxsite.org/
You can’t perform that action at this time.
0 commit comments