我试图理解为什么应该使用工厂而不是new
运算符创建对象?例如:
$validatePost = Validation::factory($_POST);
代替
$validatePost = new Validation($_POST);
该类的静态方法factory
完全相同:
public static function factory(array $array)
{
return new Validation($array);
}
根据以下问题:
使用工厂方法模式
a class can't anticipate the class of objects it must create
a class wants its subclasses to specify the objects it creates
classes delegate responsibility to one of several helper subclasses, and you want to
localize the knowledge of which helper subclass is the delegate
这样,您就有了一种创建所有对象的方法。如果您需要添加额外的功能来创建模型,例如,您只需在应用程序文件夹中使用您自己的方法覆盖原始 factory() 方法。
需要注意的是,Sunil 的回答(来自链接的讨论)中引用的原因是指“经典”GoF 工厂模式,这与这里的问题不同。
(例如,“类不能预期它必须创建的对象类”不适用于这里,因为一切都是静态确定的。)
静态工厂技术可以用于不同的目的,例如通常用于各种风格的“ finitons”(包括单例,其中 n = 1),或封装集中式(或其他非平凡的)资源管理,或出于架构灵活性原因 Denis在他的回答中提到;等等