account_circle
date_range
Simple Factory
Purpose#
SimpleFactory is a simple factory pattern.
It differs from the static factory because it is not static. Therefore, you can have multiple factories, differently parametrized, you can subclass it and you can mock it. It always should be preferred over a static factory!
UML Diagram#

Code#
SimpleFactory.php#
1 2 3 4 5 6 7 8 9 10 11 | <?php namespace DesignPatterns\Creational\SimpleFactory; class SimpleFactory { public function createBicycle(): Bicycle { return new Bicycle(); } } |
Bicycle.php#
1 2 3 4 5 6 7 8 9 10 | <?php namespace DesignPatterns\Creational\SimpleFactory; class Bicycle { public function driveTo(string $destination) { } } |
Usage#
1 2 3 | $factory = new SimpleFactory(); $bicycle = $factory->createBicycle(); $bicycle->driveTo('Paris'); |
Test#
Tests/SimpleFactoryTest.php#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php namespace DesignPatterns\Creational\SimpleFactory\Tests; use DesignPatterns\Creational\SimpleFactory\Bicycle; use DesignPatterns\Creational\SimpleFactory\SimpleFactory; use PHPUnit\Framework\TestCase; class SimpleFactoryTest extends TestCase { public function testCanCreateBicycle() { $bicycle = (new SimpleFactory())->createBicycle(); $this->assertInstanceOf(Bicycle::class, $bicycle); } } |