
工厂模式是一种常见的设计模式,主要用于创建对象。它将对象的创建过程封装起来,避免在代码中直接使用 new 关键字实例化类,从而提高代码的灵活性和可维护性。在 PHP 中,工厂模式特别适用于需要根据条件返回不同类实例的场景。
工厂模式的核心思想是:定义一个专门负责创建其他类的类,也就是“工厂”。调用者不需要知道具体创建的是哪个类的实例,只需要通过工厂提供的接口获取对象即可。
这种模式解耦了对象的使用和创建,使得新增类或修改类时,调用代码无需改动。
假设我们有一个发送通知的功能,支持邮件和短信两种方式:
立即学习“PHP免费学习笔记(深入)”;
定义接口:
interface Notification {
public function send($message);
}
实现具体类:
class EmailNotification implements Notification {
public function send($message) {
echo "发送邮件: " . $message;
}
}
class SmsNotification implements Notification {
public function send($message) {
echo "发送短信: " . $message;
}
}
创建工厂类:
class NotificationFactory {
public static function create($type) {
if ($type === 'email') {
return new EmailNotification();
} elseif ($type === 'sms') {
return new SmsNotification();
} else {
throw new InvalidArgumentException("不支持的通知类型");
}
}
}
使用方式:
$notifier = NotificationFactory::create('email');
$notifier->send('订单已发货');
工厂模式适合以下情况:
基本上就这些。工厂模式虽然简单,但在实际开发中非常实用,尤其是在构建可扩展系统时。