我知道有很多类似的问题,但我不理解大多数问题,因为我不确定我是否知道工厂方法模式是什么。
所以......在网上阅读了很多例子之后,我想出了以下简单的类。
我是否正确地做到了?
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();
答案 0 :(得分:3)
确切地说:这是工厂模式,而不是工厂方法模式。
不同之处在于,在Factory模式中,您有一个单独的工厂对象(DriveableFactory
),而在Factory方法模式中,create()
方法将是Driveable
的成员基类。我不熟悉php,这个模式似乎不适用于你的具体场景,所以我不能在这里给你一个代码示例。
但无论如何,你必须区分这两种模式。我知道围绕它们存在很多混淆,工厂方法模式的维基百科条目是完全错误的 - 在网上可以找到很多其他来源。但最好还是准确一点,因为当你使用相同的词时,沟通对于同样的事情是必不可少的......
HTH - 托马斯答案 1 :(得分:2)
是。这是factory method
模式的正确实现。
修改 +1以获取无声评论。确实应该在coderewiew上,没想过。