新闻中心
php工厂模式的使用
工厂模式是通过工厂类集中管理对象创建,避免多处使用new和条件判断。例如通知功能中,简单工厂通过类型参数返回EmailNotification或SmsNotification实例;扩展时可新增微信通知类并修改工厂,而不影响调用代码。进阶的工厂方法模式为每种产品提供独立工厂子类,如EmailNotificationFactory和SmsNotificationFactory,使系统更符合开放封闭原则。适用于对象创建逻辑复杂、需统一管理实例或频繁新增类的场景,能有效解耦代码,提升可维护性和可测试性。

工厂模式在PHP中主要用于解耦对象的创建过程,让程序更灵活、更容易维护。当你的代码需要根据不同的条件创建不同类的实例时,使用工厂模式可以避免在多处写 new 关键字,把对象创建集中管理。
什么是工厂模式
工厂模式是一种创建型设计模式,它定义一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法让类的实例化推迟到子类。
简单来说,就是不直接在代码里 new 一个对象,而是通过一个“工厂”来帮你生成所需的对象。
简单工厂模式示例
假设我们有一个发送通知的功能,支持邮件、短信两种方式:
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) {
switch ($type) {
case 'email':
return new EmailNotification();
case 'sms':
return new SmsNotification();
default:
throw new InvalidArgumentException("不支持的通知类型");
}
}
}
使用方式:
$notifier = NotificationFactory::create('email');
$notifier->send('你好,欢迎使用系统!');
这样,如果以后新增微信通知,只需要添加新类并修改工厂,其他调用代码不用变。
ChatX翻译
最实用、可靠的社交类实时翻译工具。 支持全球主流的20+款社交软件的聊天应用,全球200+语言随意切换。 让您彻底告别复制粘贴的翻译模式,与世界各地高效连接!
126
查看详情
工厂方法模式进阶
更灵活的方式是让每个具体产品对应一个工厂类:
abstract class NotificationFactory {
abstract public function createNotification(): Notification;
}
class EmailNotificationFactory extends NotificationFactory {
public function createNotification(): Notification {
return new EmailNotification();
}
}
class SmsNotificationFactory extends NotificationFactory {
public function createNotification(): Notification {
return new SmsNotification();
}
}
调用时:
$factory = new EmailNotificationFactory();
$notifier = $factory->createNotification();
$notifier->send('登录提醒');
这种方式更适合复杂系统,扩展性强,符合开放封闭原则。
什么时候用工厂模式
考虑使用工厂模式的情况包括:
- 对象创建逻辑复杂,比如需要读配置、判断环境
- 需要统一管理对象实例(比如单例)
- 频繁增加新的类,不想到处改 new 的地方
- 想让代码更容易测试,方便 mock 对象
基本上就这些。工厂模式不是万能,但当你发现 new 太多、if/else 太乱时,它是个不错的解决方案。
以上就是php工厂模式的使用的详细内容,更多请关注其它相关文章!
# 是个
# 女子连衣裙seo分析
# 台州网站建设制作公司
# 彭阳门户网站建设
# 清溪网站建设制作公司
# 门头沟淘宝seo
# 营销推广的总结语
# 葫芦岛快速网站优化
# 万事利丝绸的营销推广
# 优化后网站收录量增加
# 潮州机械制造网站建设
# 太多
# 是一种
# php
# 更灵活
# 组中
# 多处
# 更容易
# 上传
# 进阶
# 子类
# 简单工厂模式
# switch
# ai
# 微信
# 工厂模式
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
漫蛙网页登录入口 漫蛙漫画官方授权网址
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
深入理解Promise链:如何在catch后中断then的执行
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
《噬血代码2》新预告片发布 展示游戏剧情
Go语言中的*string:深入理解字符串指针
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
c++ 命名空间怎么用 c++ namespace使用指南
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
Archive of Our Own官网直达 AO3最新可用地址一览
J*aScript实现单选按钮与关联输入框的联动禁用教程
狙击外星人小游戏开始_狙击外星人小游戏立即开始
J*aScriptWebpack优化_J*aScript构建工具实战
Animex动漫社网入口地址 Animex动漫社网正版在线入口
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
b站如何看历史记录_b站观看历史找回方法
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
韩剧圈正版入口页面_韩剧圈官网登录链接
蛙漫官方正版入口 蛙漫网页在线全集免费观看
Golang如何使用context实现超时取消_Golang context超时取消模式实践
菜鸟取件码是什么怎么查 最全查询渠道汇总
J*aScript数组对象转换:按指定键分组与值收集
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
抖音从哪里进入网页版_抖音官方入口链接
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
汽水音乐在线版入口_汽水音乐网页播放手册
红果短剧网页版官网入口 官方最新网址发布
抖音网页版快捷访问 抖音网页版网页版入口操作教程
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
Node.js中HTML按钮与J*aScript函数交互的正确姿势
免费抖音短视频入口_抖音网页版短视频免费通道
天眼查企业查询官网入口 天眼查官方网页版查询
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版


2025-11-28
浏览次数:次
返回列表