我想知道这个教程是否正确地在PHP中实现了工厂设计模式。以下是实际的源代码。
<?php
class Automobile
{
private $vehicle_make;
private $vehicle_model;
public function __construct($make, $model)
{
$this->vehicle_make = $make;
$this->vehicle_model = $model;
}
public function get_make_and_model()
{
return $this->vehicle_make . ' ' . $this->vehicle_model;
}
}
class AutomobileFactory
{
public static function create($make, $model)
{
return new Automobile($make, $model);
}
}
// have the factory create the Automobile object
$veyron = AutomobileFactory::create('Bugatti', 'Veyron');
print_r($veyron->get_make_and_model()); // outputs "Bugatti Veyron"
根据《设计模式》一书,工厂模式的适用性包括:
- 一个类无法预知它必须创建哪些对象
- 一个类希望由其子类来指定创建的对象
- 类将责任委托给多个辅助子类之一,并且您希望本地化哪个辅助子类是代理的知识
Automobile
,不是吗?第二点,没有子类。
Automobile
类不继承自AutomobileFactory
。我认为AutomobileFactory应该至少有一个由Automobile实现的函数,处理对象创建。有人能澄清一下吗?我刚开始学习设计模式,每次遇到与其他教程不同的教程,都会让我感到困惑。
DoorFactory
类似乎使用了工厂模式,因为它将Door
对象的创建推迟到其子类(SaoPauloDoorFactory
和NYDoorFactory
)中。但是我没有看到DoorFactory
和KnobSupplier
之间在设计模式方面的任何关系。 - kidonchu