Skip to content

Commit e754ddc

Browse files
author
hs040x
committed
complete factory method
1 parent 55f99e4 commit e754ddc

File tree

6 files changed

+137
-1
lines changed

6 files changed

+137
-1
lines changed

readme.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
* [Design Patterns](https://github.com/harryosmar/design-patterns/tree/master/src/)
55
* [Creational Patterns](https://github.com/harryosmar/design-patterns/tree/master/src/CreationalPatterns)
66
* [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)
89

910

1011
## How to set up
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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+
}

tests/unit/FactoryMethodTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
 (0)