File tree Expand file tree Collapse file tree 6 files changed +137
-1
lines changed
AbstractFactoryDesignPattern/AbstractBook Expand file tree Collapse file tree 6 files changed +137
-1
lines changed Original file line number Diff line number Diff line change 4
4
* [ Design Patterns] ( https://github.com/harryosmar/design-patterns/tree/master/src/ )
5
5
* [ Creational Patterns] ( https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns )
6
6
* [ Abstract Factory Design Pattern] ( https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns/AbstractFactoryDesignPattern )
7
- * [ BuilderDesignPattern] ( https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns/BuilderDesignPattern )
7
+ * [ Builder Design Pattern] ( https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns/BuilderDesignPattern )
8
+ * [ Factory Method] ( https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns/FactoryMethod )
8
9
9
10
10
11
## How to set up
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Harry Osmar Sitohang <[email protected] >
4
+ * @copyright 2018 Wayfair LLC - All rights reserved
5
+ */
6
+
7
+ namespace Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook ;
8
+
9
+ class NullMySQLBook extends AbstractMySQLBook {
10
+
11
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Harry Osmar Sitohang <[email protected] >
4
+ * @copyright 2018 Wayfair LLC - All rights reserved
5
+ */
6
+
7
+ namespace Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook ;
8
+
9
+ class NullPHPBook extends AbstractPHPBook {
10
+
11
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Harry Osmar Sitohang <[email protected] >
4
+ * @copyright 2018 Wayfair LLC - All rights reserved
5
+ */
6
+
7
+ namespace Sample \CreationalPatterns \FactoryMethod ;
8
+
9
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \AbstractMySQLBook ;
10
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \AbstractPHPBook ;
11
+
12
+ abstract class AbstractFactoryMethod {
13
+ /**
14
+ * @param string $param
15
+ *
16
+ * @return AbstractPHPBook
17
+ */
18
+ abstract function makePHPBook (string $ param ) : AbstractPHPBook ;
19
+
20
+ /**
21
+ * @param string $param
22
+ *
23
+ * @return AbstractMySQLBook
24
+ */
25
+ abstract function makeMySQLBook (string $ param ) : AbstractMySQLBook ;
26
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Harry Osmar Sitohang <[email protected] >
4
+ * @copyright 2018 Wayfair LLC - All rights reserved
5
+ */
6
+
7
+ namespace Sample \CreationalPatterns \FactoryMethod ;
8
+
9
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \AbstractMySQLBook ;
10
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \AbstractPHPBook ;
11
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \NullMySQLBook ;
12
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \NullPHPBook ;
13
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \OReillyBooks \OReillyMySQLBook ;
14
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \OReillyBooks \OReillyPHPBook ;
15
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \SamsBooks \SamsMySQLBook ;
16
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \SamsBooks \SamsPHPBook ;
17
+
18
+ class FactoryMethod extends AbstractFactoryMethod {
19
+ /**
20
+ * @param string $param
21
+ *
22
+ * @return AbstractPHPBook
23
+ */
24
+ function makePHPBook (string $ param ) : AbstractPHPBook {
25
+ switch ($ param ) {
26
+ case "OReilly " :
27
+ return new OReillyPHPBook ();
28
+ break ;
29
+ case "sams " :
30
+ return new SamsPHPBook ();
31
+ break ;
32
+ default :
33
+ return new NullPHPBook ();
34
+ break ;
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @param string $param
40
+ *
41
+ * @return AbstractMySQLBook
42
+ */
43
+ function makeMySQLBook (string $ param ) : AbstractMySQLBook {
44
+ switch ($ param ) {
45
+ case "OReilly " :
46
+ return new OReillyMySQLBook ();
47
+ break ;
48
+ case "sams " :
49
+ return new SamsMySQLBook ();
50
+ break ;
51
+ default :
52
+ return new NullMySQLBook ();
53
+ break ;
54
+ }
55
+ }
56
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ /**
3
+ * @author Harry Osmar Sitohang <[email protected] >
4
+ * @copyright 2018 Wayfair LLC - All rights reserved
5
+ */
6
+
7
+ namespace Sample \Tests \unit ;
8
+
9
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \NullMySQLBook ;
10
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \AbstractBook \NullPHPBook ;
11
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \OReillyBooks \OReillyMySQLBook ;
12
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \OReillyBooks \OReillyPHPBook ;
13
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \SamsBooks \SamsMySQLBook ;
14
+ use Sample \CreationalPatterns \AbstractFactoryDesignPattern \SamsBooks \SamsPHPBook ;
15
+ use Sample \CreationalPatterns \FactoryMethod \FactoryMethod ;
16
+
17
+ class FactoryMethodTest extends Base {
18
+ /**
19
+ * @test
20
+ */
21
+ public function shouldBeAbleToGenerateBookUsingFactoryMethod () {
22
+ $ factoryMethod = new FactoryMethod ();
23
+
24
+ $ this ->assertInstanceOf (OReillyPHPBook::class, $ factoryMethod ->makePHPBook ('OReilly ' ));
25
+ $ this ->assertInstanceOf (OReillyMySQLBook::class, $ factoryMethod ->makeMySQLBook ('OReilly ' ));
26
+ $ this ->assertInstanceOf (SamsPHPBook::class, $ factoryMethod ->makePHPBook ('sams ' ));
27
+ $ this ->assertInstanceOf (SamsMySQLBook::class, $ factoryMethod ->makeMySQLBook ('sams ' ));
28
+ $ this ->assertInstanceOf (NullPHPBook::class, $ factoryMethod ->makePHPBook ('404 ' ));
29
+ $ this ->assertInstanceOf (NullMySQLBook::class, $ factoryMethod ->makeMySQLBook ('404 ' ));
30
+ }
31
+ }
You can’t perform that action at this time.
0 commit comments