mirror of
https://github.com/DesignPatternsPHP/DesignPatternsPHP.git
synced 2025-08-06 06:57:25 +02:00
89 - ConcreteFactory changed to SimpleFactory
This commit is contained in:
45
Creational/SimpleFactory/SimpleFactory.php
Normal file
45
Creational/SimpleFactory/SimpleFactory.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace DesignPatterns\Creational\SimpleFactory;
|
||||
|
||||
/**
|
||||
* class SimpleFactory.
|
||||
*/
|
||||
class SimpleFactory
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $typeList;
|
||||
|
||||
/**
|
||||
* You can imagine to inject your own type list or merge with
|
||||
* the default ones...
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->typeList = array(
|
||||
'bicycle' => __NAMESPACE__.'\Bicycle',
|
||||
'other' => __NAMESPACE__.'\Scooter',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a vehicle.
|
||||
*
|
||||
* @param string $type a known type key
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return VehicleInterface a new instance of VehicleInterface
|
||||
*/
|
||||
public function createVehicle($type)
|
||||
{
|
||||
if (!array_key_exists($type, $this->typeList)) {
|
||||
throw new \InvalidArgumentException("$type is not valid vehicle");
|
||||
}
|
||||
$className = $this->typeList[$type];
|
||||
|
||||
return new $className();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user