mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-08-10 00:46:38 +02:00
PHP7 Static Factory
This commit is contained in:
@@ -3,30 +3,26 @@
|
||||
namespace DesignPatterns\Creational\StaticFactory;
|
||||
|
||||
/**
|
||||
* Note1: Remember, static => global => evil
|
||||
* Note1: Remember, static means global state which is evil because it can't be mocked for tests
|
||||
* Note2: Cannot be subclassed or mock-upped or have multiple different instances.
|
||||
*/
|
||||
class StaticFactory
|
||||
final class StaticFactory
|
||||
{
|
||||
/**
|
||||
* the parametrized function to get create an instance.
|
||||
*
|
||||
* @param string $type
|
||||
*
|
||||
* @static
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return FormatterInterface
|
||||
*/
|
||||
public static function factory($type)
|
||||
public static function factory(string $type): FormatterInterface
|
||||
{
|
||||
$className = __NAMESPACE__.'\Format'.ucfirst($type);
|
||||
|
||||
if (!class_exists($className)) {
|
||||
throw new \InvalidArgumentException('Missing format class.');
|
||||
if ($type == 'number') {
|
||||
return new FormatNumber();
|
||||
}
|
||||
|
||||
return new $className();
|
||||
if ($type == 'string') {
|
||||
return new FormatString();
|
||||
}
|
||||
|
||||
throw new \InvalidArgumentException('Unknown format given');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user