我只是想知道PHP中的工厂是什么,我如何在我的代码中使用它?
它有它的优点和缺点吗?
答案 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
之类的内容。