php中的工厂是什么以及它如何有用?

时间:2010-03-26 06:21:25

标签: php oop

我只是想知道PHP中的工厂是什么,我如何在我的代码中使用它?

它有它的优点和缺点吗?

3 个答案:

答案 0 :(得分:7)

AbstractFactory Creational Design Pattern

  

提供用于创建相关或从属对象族的接口,而无需指定其具体类。

简而言之:

class MercedesFactory
{
    public static function createCar()
    {
        $engine = new MercedesEngine;
        $car = new Mercedes($engine);
        return $car;
    }
}

还有Factory Method,其中

  

定义用于创建对象的接口,但让子类决定实例化哪个类。 Factory Method允许类将实例化延迟到子类。

简而言之:

class User
{
    public static function create()
    {
        return new self;
    }
}

答案 1 :(得分:7)

Factory是最有用的模式之一,因为它提供了一种从代码中删除特定类名的方法,使其更容易支持和重构。

考虑一个例子:你有一个发送电子邮件的应用程序,并为此目的使用'Mailer'类:

class Site

  function sendWelcomeMail
     $m = new Mailer;
     $m->send("Welcome..."); 

  function sendReminderMail
     $m = new Mailer;
     $m->send("Reminder..."); 

 etc...

有一天你决定使用另一个名为'NewMailer'的邮件程序。使用上面的代码,你必须找到所有出现的Mailer并将它们手动替换为NewMailer。这在大型项目中可能是一个真正的痛苦。

使用工厂时,不要使用“新”和特定的类名,只需在需要对象时调用方法

class Factory

      function createMailer() 
          return new Mailer;


class Site

  function sendWelcomeMail
     $m = Factory::createMailer();
     $m->send("Welcome..."); 

  function sendReminderMail
     $m = Factory::createMailer();
     $m->send("Reminder..."); 

 etc...

要在整个地方用NewMailer替换Mailer,只需在工厂方法中更改一行。

答案 2 :(得分:2)

这是creates classes的功能。如果您需要批量创建具有微小行为变化的类,那么它很有用。另一方面,滥用会导致诸如FactoryFactoryFactoryFactoryFactoryFactory之类的内容。