0

我不确定如何应用工厂模式。

如果我以这段代码为例:

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 和工厂模式的组合让我感到困惑,应该在哪里启动任何事情或任何事情。我看到了他们所有人的好处(我认为)。

依赖注入如何在这里发挥作用?每个部分都可以是它自己的对象,但为了简单起见,我暂时将其省略了。

希望我的问题足够清楚。

提前致谢!

4

1 回答 1

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();

类似的东西。

于 2013-04-26T13:36:59.750 回答