1+ <?php
2+
3+ namespace PhpDesignPatterns \Structural \Facade ;
4+
5+ /**
6+ * Class CoffeeMakerFacade
7+ * @package PhpDesignPatterns\Structural\Facade
8+ */
9+ Class CoffeeMakerFacade
10+ {
11+ /**
12+ * Minimum number of cups to make.
13+ *
14+ * @var integer
15+ */
16+ const MINIMUM_CUPS = 1 ;
17+
18+ /**
19+ * Instance of Dispenser.
20+ *
21+ * @var Dispenser
22+ */
23+ private $ coffee_dispenser ;
24+
25+ /**
26+ * Instance of Dispenser.
27+ *
28+ * @var Dispenser
29+ */
30+ private $ sugar_dispenser ;
31+
32+ /**
33+ * Instance of Dispenser.
34+ *
35+ * @var Dispenser
36+ */
37+ private $ water_dispenser ;
38+
39+ /**
40+ *
41+ */
42+ public function __construct ()
43+ {
44+ $ this ->coffee_dispenser = new CoffeeDispenser ;
45+ $ this ->sugar_dispenser = new SugarDispenser ;
46+ $ this ->water_dispenser = new WaterDispenser ;
47+ }
48+
49+ /**
50+ * Make N cups of coffee.
51+ *
52+ * @param integer $cups Number of cups to make.
53+ * @return array
54+ */
55+ public function makeCups ($ cups )
56+ {
57+ $ cups = $ this ->checkCups ($ cups );
58+
59+ $ coffee_cups = array ();
60+ for ($ i =1 ;$ i <$ cups +1 ;$ i ++) {
61+ $ products = implode (', ' , $ this ->getProducts ());
62+ $ coffee_cups ["coffee # " .$ i ] = $ products ;
63+ }
64+ return $ coffee_cups ;
65+ }
66+
67+ /**
68+ * Just check cups.
69+ *
70+ * @param mixed $cups
71+ * @return integer
72+ */
73+ private function checkCups ($ cups )
74+ {
75+ if (static ::MINIMUM_CUPS > $ cups ) {
76+ $ cups = static ::MINIMUM_CUPS ;
77+ }
78+ return $ cups ;
79+ }
80+
81+ /**
82+ * Get products from different dispensers.
83+ *
84+ * @return array
85+ */
86+ private function getProducts ()
87+ {
88+ return array (
89+ $ this ->sugar_dispenser ->getProduct (),
90+ $ this ->coffee_dispenser ->getProduct (),
91+ $ this ->water_dispenser ->getProduct (),
92+ );
93+ }
94+ }
0 commit comments