php 工厂静态类,静态工厂模式(Static Factory)
1.9.1. 目的
與抽象工廠模式類似,此模式用于創(chuàng)建一系列相關或相互依賴的對象。 『靜態(tài)工廠模式』與『抽象工廠模式』的區(qū)別在于,只使用一個靜態(tài)方法來創(chuàng)建所有類型對象, 此方法通常被命名為 factory 或 build。
1.9.2. 例子
Zend Framework:?Zend_Cache_Backend?或 _Frontend 使用工廠方法創(chuàng)建緩存后端或前端
1.9.3. UML 圖
1.9.4. 代碼
你可以在?GitHub 上找到這個代碼。
StaticFactory.php
namespace DesignPatterns\Creational\StaticFactory;
/**
* 注意點1: 記住,靜態(tài)意味著全局狀態(tài),因為它不能被模擬進行測試,所以它是有弊端的
* 注意點2: 不能被分類或模擬或有多個不同的實例。
*/
final class StaticFactory
{
/**
* @param string $type
*
* @return FormatterInterface
*/
public static function factory(string $type): FormatterInterface
{
if ($type == 'number') {
return new FormatNumber();
}
if ($type == 'string') {
return new FormatString();
}
throw new \InvalidArgumentException('Unknown format given');
}
}
FormatterInterface.php
namespace DesignPatterns\Creational\StaticFactory;
interface FormatterInterface
{
}
FormatString.php
namespace DesignPatterns\Creational\StaticFactory;
class FormatString implements FormatterInterface
{
}
FormatNumber.php
namespace DesignPatterns\Creational\StaticFactory;
class FormatNumber implements FormatterInterface
{
}
1.9.5. 測試
Tests/StaticFactoryTest.php
namespace DesignPatterns\Creational\StaticFactory\Tests;
use DesignPatterns\Creational\StaticFactory\StaticFactory;
use PHPUnit\Framework\TestCase;
class StaticFactoryTest extends TestCase
{
public function testCanCreateNumberFormatter()
{
$this->assertInstanceOf(
'DesignPatterns\Creational\StaticFactory\FormatNumber',
StaticFactory::factory('number')
);
}
public function testCanCreateStringFormatter()
{
$this->assertInstanceOf(
'DesignPatterns\Creational\StaticFactory\FormatString',
StaticFactory::factory('string')
);
}
/**
* @expectedException \InvalidArgumentException
*/
public function testException()
{
StaticFactory::factory('object');
}
}
本譯文僅用于學習和交流目的,轉載請務必注明文章譯者、出處、和本文鏈接
我們的翻譯工作遵照 CC 協(xié)議,如果我們的工作有侵犯到您的權益,請及時聯(lián)系我們。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的php 工厂静态类,静态工厂模式(Static Factory)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机协处理器java,HBase1.x实
- 下一篇: php循环输出标题,php-如何通过循环