2017-09-25 127 views
0

我用简单的Factory pattern,看屏幕,请:工厂模式 - 如何避免开关建设?

enter image description here

正如你可以看到我使用开关操作来选择对象,并创建实例。

但是如果有超过100个课程?问题出现了。 如何避免开关施工?使用界面?

+1

'return new $ type(new Position());'应该可以工作,(但我不知道你是否想这么做) –

+0

你的意思是使用变量作为类名吗? – OPV

+0

可能是另外使用另一种模式或抽象工厂? – OPV

回答

1

您可以通过使用变量与类名一起new关键字,你必须关心的唯一事情就是namespace避免switchif语句!您的代码必须是这样的:

$className = "YourNamespace\\SomeFactory\\SomeImplementation\\" . $type; 
return new $className(new Position()); 

此外,您还可以检查是否存在类:

if (class_exists($className) === false) { 
    throw new Exception("Class $className not found."); 
} 

,之后才是你创造新的实例。