举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > php静态工厂模式是什么 PHP 静态工厂模式

php静态工厂模式是什么 PHP 静态工厂模式

2023-05-20 15:31 PHP设计模式

php静态工厂模式是什么 PHP 静态工厂模式

php静态工厂模式是什么 PHP 静态工厂模式

php静态工厂模式是什么

目的

与 抽象工厂 类似,静态工厂模式用于创建一系列互相关联或依赖的对象。它与抽象工厂模式的区别在于,静态工厂模式仅使用 一个静态方法 来创建所有它可以创建的类型。通常,这个静态方法被命名为:factory 或 build。

UML 图

Alt StaticFactory UML Diagram

1.8.3. 代码

StaticFactory.php

<?php

declare(strict_types=1);

namespace DesignPatternsCreationalStaticFactory;

use InvalidArgumentException;


final class StaticFactory
{
    public static function factory(string $type): Formatter
    {
        if ($type == "number") {
            return new FormatNumber();
        } elseif ($type == "string") {
            return new FormatString();
        }

        throw new InvalidArgumentException("Unknown format given");
    }
}

Formatter.php

<?php

declare(strict_types=1);

namespace DesignPatternsCreationalStaticFactory;

interface Formatter
{
    public function format(string $input): string;
}

FormatString.php

<?php

declare(strict_types=1);

namespace DesignPatternsCreationalStaticFactory;

class FormatString implements Formatter
{
    public function format(string $input): string
    {
        return $input;
    }
}

FormatNumber.php

<?php

declare(strict_types=1);

namespace DesignPatternsCreationalStaticFactory;

class FormatNumber implements Formatter
{
    public function format(string $input): string
    {
        return number_format((int) $input);
    }
}

测试

Tests/StaticFactoryTest.php

<?php

declare(strict_types=1);

namespace DesignPatternsCreationalStaticFactoryTests;

use InvalidArgumentException;
use DesignPatternsCreationalStaticFactoryFormatNumber;
use DesignPatternsCreationalStaticFactoryFormatString;
use DesignPatternsCreationalStaticFactoryStaticFactory;
use PHPUnitFrameworkTestCase;

class StaticFactoryTest extends TestCase
{
    public function testCanCreateNumberFormatter()
    {
        $this->assertInstanceOf(FormatNumber::class, StaticFactory::factory("number"));
    }

    public function testCanCreateStringFormatter()
    {
        $this->assertInstanceOf(FormatString::class, StaticFactory::factory("string"));
    }

    public function testException()
    {
        $this->expectException(InvalidArgumentException::class);

        StaticFactory::factory("object");
    }
}


阅读全文
以上是鳄鱼CMS为你收集整理的php静态工厂模式是什么 PHP 静态工厂模式全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们