File tree Expand file tree Collapse file tree 8 files changed +198
-0
lines changed
SandersW-LearningPHPDesignPatterns/decorator/decorator_with_multiple_components Expand file tree Collapse file tree 8 files changed +198
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+ //Client.php
3+ /*Age groups:
4+ 18-29: Group 1
5+ 30-39: Group 2
6+ 40-49: Group 3
7+ 50+ : Group 4
8+ */
9+ function __autoload ($ class_name )
10+ {
11+ include $ class_name . '.php ' ;
12+ }
13+ class Client
14+ {
15+ //$hotDate is component instance
16+ private $ hotDate ;
17+ public function __construct ()
18+ {
19+ $ this ->hotDate =new Female ();
20+ $ this ->hotDate ->setAge ("Age Group 4 " );
21+ echo $ this ->hotDate ->getAge ();
22+ $ this ->hotDate =$ this ->wrapComponent ($ this ->hotDate );
23+ echo $ this ->hotDate ->getFeature ();
24+ }
25+ private function wrapComponent (IComponent $ component )
26+ {
27+ $ component =new ProgramLang ($ component );
28+ $ component ->setFeature ("php " );
29+ $ component =new Hardware ($ component );
30+ $ component ->setFeature ("lin " );
31+ $ component =new Food ($ component );
32+ $ component ->setFeature ("veg " );
33+ //var_dump($component); die;
34+ return $ component ;
35+ }
36+ }
37+ $ worker =new Client ();
Original file line number Diff line number Diff line change 1+ <?php
2+ //Decorator.php
3+ //Decorator participant
4+ abstract class Decorator extends IComponent
5+ {
6+ public function setAge ($ ageNow )
7+ {
8+ $ this ->ageGroup =$ this ->ageGroup ;
9+ }
10+ public function getAge ()
11+ {
12+ return $ this ->ageGroup ;
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //Female.php
3+ //Female Concrete Component
4+ class Female extends IComponent
5+ {
6+ public function __construct ()
7+ {
8+ $ this ->date ="Female " ;
9+ $ this ->setFeature ("<br />Grrrl programmer features: " );
10+ }
11+ public function getAge ()
12+ {
13+ return $ this ->ageGroup ;
14+ }
15+ public function setAge ($ ageNow )
16+ {
17+ $ this ->ageGroup =$ ageNow ;
18+ }
19+ public function getFeature ()
20+ {
21+ return $ this ->feature ;
22+ }
23+ public function setFeature ($ fea )
24+ {
25+ $ this ->feature =$ fea ;
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //Food.php
3+ //Concrete decorator
4+ class Food extends Decorator
5+ {
6+ private $ chowNow ;
7+ public function __construct (IComponent $ dateNow )
8+ {
9+ $ this ->date = $ dateNow ;
10+ }
11+ private $ snacks =array ("piz " =>"Pizza " ,
12+ "burg " =>"Burgers " ,
13+ "nach " =>"Nachos " ,
14+ "veg " =>"Veggies " );
15+ public function setFeature ($ yum )
16+ {
17+ $ this ->chowNow =$ this ->snacks [$ yum ];
18+ }
19+ public function getFeature ()
20+ {
21+ $ output =$ this ->date ->getFeature ();
22+ $ fmat ="<br/> " ;
23+ $ output .="$ fmat Favorite food: " ;
24+ $ output .= $ this ->chowNow . "<br/> " ;
25+ return $ output ;
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //Hardware.php
3+ //Concrete decorator
4+ class Hardware extends Decorator
5+ {
6+ private $ hardwareNow ;
7+ public function __construct (IComponent $ dateNow )
8+ {
9+ $ this ->date = $ dateNow ;
10+ }
11+ private $ box =array ("mac " =>"Macintosh " ,
12+ "dell " =>"Dell " ,
13+ "hp " =>"Hewlett-Packard " ,
14+ "lin " =>"Linux " );
15+ public function setFeature ($ hdw )
16+ {
17+ $ this ->hardwareNow =$ this ->box [$ hdw ];
18+ }
19+ public function getFeature ()
20+ {
21+ $ output =$ this ->date ->getFeature ();
22+ $ fmat ="<br/> " ;
23+ $ output .="$ fmat Current Hardware: " ;
24+ $ output .= $ this ->hardwareNow ;
25+ return $ output ;
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //IComponent.php
3+ //Component interface
4+ abstract class IComponent
5+ {
6+ protected $ date ;
7+ protected $ ageGroup ;
8+ protected $ feature ;
9+ abstract public function setAge ($ ageNow );
10+ abstract public function getAge ();
11+ abstract public function getFeature ();
12+ abstract public function setFeature ($ fea );
13+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //Male.php
3+ //Male Concrete Component
4+ class Male extends IComponent
5+ {
6+ public function __construct ()
7+ {
8+ $ this ->date ="Male " ;
9+ $ this ->setFeature ("<br/>Dude programmer features: " );
10+ }
11+ public function getAge ()
12+ {
13+ return $ this ->ageGroup ;
14+ }
15+ public function setAge ($ ageNow )
16+ {
17+ $ this ->ageGroup =$ ageNow ;
18+ }
19+ public function getFeature ()
20+ {
21+ return $ this ->feature ;
22+ }
23+ public function setFeature ($ fea )
24+ {
25+ $ this ->feature =$ fea ;
26+ }
27+ }
Original file line number Diff line number Diff line change 1+ <?php
2+ //ProgramLang.php
3+ //Concrete decorator
4+ class ProgramLang extends Decorator
5+ {
6+ private $ languageNow ;
7+ public function __construct (IComponent $ dateNow )
8+ {
9+ $ this ->date = $ dateNow ;
10+ }
11+ private $ language =array ("php " =>"PHP " ,
12+ "cs " =>"C# " ,
13+ "js " =>"JavaScript " ,"as3 " =>"ActionScript 3.0 " );
14+ public function setFeature ($ lan )
15+ {
16+ $ this ->languageNow =$ this ->language [$ lan ];
17+ }
18+ public function getFeature ()
19+ {
20+ $ output =$ this ->date ->getFeature ();
21+ $ fmat ="<br/> " ;
22+ $ output .="$ fmat Preferred programming language: " ;
23+ $ output .= $ this ->languageNow ;
24+ return $ output ;
25+ }
26+ }
You can’t perform that action at this time.
0 commit comments