Skip to content

Commit f142283

Browse files
committed
Composite
1 parent 58436e0 commit f142283

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

Composite/index.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
/**
4+
* Design pattern "Composite" (Structural)
5+
* This is demo code
6+
* See for details: http://maxsite.org/page/php-patterns
7+
*/
8+
9+
/**
10+
* Composite methods
11+
*/
12+
interface CompositeInterface
13+
{
14+
public function run();
15+
}
16+
17+
/**
18+
* Composite run
19+
*/
20+
class Composite implements CompositeInterface
21+
{
22+
private $classes;
23+
24+
/**
25+
* Add class to list
26+
*/
27+
public function addClass(CompositeInterface $class)
28+
{
29+
$this->classes[] = $class;
30+
}
31+
32+
/**
33+
* running all classes
34+
*/
35+
public function run()
36+
{
37+
foreach ($this->classes as $class) {
38+
$class->run();
39+
}
40+
}
41+
}
42+
43+
/**
44+
* Demo Class1
45+
*/
46+
class Class1 implements CompositeInterface
47+
{
48+
public function run()
49+
{
50+
echo 'Class1 run <br>';
51+
}
52+
}
53+
54+
/**
55+
* Demo Class2
56+
*/
57+
class Class2 implements CompositeInterface
58+
{
59+
public function run()
60+
{
61+
echo 'Class2 run <br>';
62+
}
63+
}
64+
65+
/**
66+
* demo
67+
*/
68+
69+
// create Composite
70+
$a = new Composite();
71+
72+
// add classes
73+
$a->addClass(new Class1());
74+
$a->addClass(new Class2());
75+
76+
// run all
77+
$a->run();
78+
/*
79+
Class1 run
80+
Class2 run
81+
*/
82+
83+
# end of file

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ See details on http://maxsite.org/page/php-patterns
99
* "Singleton" (Creational)
1010
* "Multiton" (Creational)
1111
* "Registry" (Structural)
12+
* "Composite" (Structural)
1213

1314

1415
(c) MaxSite.org, 2019, http://maxsite.org/

0 commit comments

Comments
 (0)