我知道有很多类似的问题,但是我不理解这些问题中的大多数,因为我不确定我是否知道工厂方法模式是什么。
. .在网上阅读了许多例子后,我想出了下面这些简单的类。
我做对了吗?
abstract class Driveable
{
abstract public function start();
abstract public function stop();
}
class CoupeDriveable extends Driveable
{
public function start()
{
}
public function stop()
{
}
}
class MotorcycleDriveable extends Driveable
{
public function start()
{
}
public function stop()
{
}
}
class SedanDriveable extends Driveable
{
public function start()
{
}
public function stop()
{
}
}
class DriveableFactory
{
static public function create($numberOfPeople){
if( $numberOfPeople == 1 )
{
return new MotorcycleDriveable;
}
elseif( $numberOfPeople == 2 )
{
return new CoupleDriveable;
}
elseif( $numberOfPeople >= 3 && $numberOfPeople < 4)
{
return SedanDriveable;
}
}
}
class App
{
static public function getDriveableMachine($numberOfPeople)
{
return DriveableFactory::create($numberOfPeople);
}
}
$DriveableMachine = App::getDriveableMachine(2);
$DriveableMachine->start();
确切地说:这是一个工厂模式,而不是工厂方法模式。
区别在于,在工厂模式中,您有一个单独的工厂对象(DriveableFactory
),而在工厂方法模式中,create()
方法将是Driveable
基类的成员。我不熟悉php,而且该模式似乎并不适用于您的具体场景,因此我无法在这里提供代码示例。
但无论如何,你必须区分这两种模式。我知道围绕它们有很多困惑,维基百科上关于工厂方法模式的条目就是完全错误的——在web上可以找到许多其他来源。但在这一点上最好做到准确,因为当你使用相同的词语时,沟通的意思是相同的,这是至关重要的……
HTH - Thomas
是。这是factory method
模式的正确实现。
编辑 +1沉默的评论。应该是在codereview上的,没想到。