1.6. Simple Factory パターン

1.6.1. 目的

SimpleFactoryは単純な形のFactory パターンです。

静的(static)ではないので、Static Factory パターンとは異なります。したがって、パラメーターが異なる複数のインスタンス(factory)を持つことができますし、サブクラス化したり、モック化したりできます。Static Factory パターンよりも常に優先的に使用すべきと言えます!

1.6.2. クラス図

Alt SimpleFactory UML Diagram

1.6.3. サンプルコード

サンプルコードは GitHub でも確認することができます。

SimpleFactory.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php

declare(strict_types=1);

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
11
12
<?php

declare(strict_types=1);

namespace DesignPatterns\Creational\SimpleFactory;

class Bicycle
{
    public function driveTo(string $destination)
    {
    }
}

1.6.4. Usage

1
2
3
 $factory = new SimpleFactory();
 $bicycle = $factory->createBicycle();
 $bicycle->driveTo('Paris');

1.6.5. テスト

Tests/SimpleFactoryTest.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php

declare(strict_types=1);

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);
    }
}