我不确定如何应用工厂模式。
如果我以此代码为例:
class Car
{
protected $_engine;
protected $_frame;
protected $_wheels;
public function __construct($engine,$frame,$wheels)
{
$this->_engine = $engine;
$this->_frame = $frame;
$this->_wheels = $wheels;
}
}
class Engine
{
protected $_hp;
public function __construct($hp)
{
$this->_hp = $hp;
}
}
class Frame
{
protected $_type;
protected $_length;
public function __construct($type,$length)
{
$this->_type = $type;
$this->_length = $length;
}
}
class Wheels
{
protected $_diameter;
public function __construct($diameter)
{
$this->_diameter = $diameter;
}
}
class CarFactory
{
// ???
}
工厂应该如何制造汽车的所有部件?我是否需要每个部件都有工厂?如果是这样,CarFactory如何了解它们? IOC,DI和工厂模式的结合让我感到困惑,应该启动一切或任何事情。我看到了所有这些的好处(我想)。
依赖注入如何在这里发挥作用?每个部分都可能是它自己的对象,但为了简单起见,我暂时将它留在了外面。
希望我的问题很清楚。
提前致谢!
答案 0 :(得分:0)
如果你有不同类型的汽车,你需要使用工厂。
class Car
{
protected $type;
public function drive()
{
echo 'Zoom-zoom!';
}
public static function factory($driven)
{
$instance = null;
switch ($driven) {
case 2:
$instance = new Sedan;
break;
case 4:
$instance = new Crossover;
break;
default:
throw new Exception('Invalid driven type: ' . $driven);
}
return $instance;
}
}
class Sedan extends Car
{
// some things for sedan
}
class Crossover extends Car
{
// some things for Crossover
}
$sedan = Car::factory(2);
$crossover = Car::factory(4);
$sedan->drive();
$crossover->drive();
类似的东西。