96SEO 2026-06-21 01:16 0
工厂方法模式到底是个啥玩意儿?
先说实话,hen多小伙伴一听到“工厂方法”,脑子里立马浮现出一大堆工厂、机器、流水线的画面。
哈哈,其实它就是一种让代码geng灵活、geng易 的“套路”。

核心思想:把对象的创建交给子类去实现,父类只管定义创建的接口。
这么干的好处是业务里要加新东西时基本不需要动老代码。
角色拆分,一kan就懂抽象产品——定义所有产品共同的方法。
具体产品——实现抽象产品的细节。
抽象工厂——声明创建产品的方法。
具体工厂——负责实例化对应的具体产品。
说白了就是把“我想要什么”和“怎么造”分开,让后者交给专门的小工厂去干活。
来点真实代码,感受一下气氛// 抽象产品
public interface PayService {
void pay;
}
// 具体产品
public class AlipayService implements PayService {
@Override
public void pay {
System.out.println;
}
}
public class WechatPayService implements PayService {
@Override
public void pay {
System.out.println;
}
}
// 抽象工厂
public interface PayServiceFactory {
PayService createPayService;
}
// 具体工厂
public class AlipayServiceFactory implements PayServiceFactory {
@Override
public PayService createPayService {
return new AlipayService;
}
}
public class WechatPayServiceFactory implements PayServiceFactory {
@Override
public PayService createPayService {
return new WechatPayService;
}
}
// 工厂注册表:集中管理工厂实例,客户端不直接依赖具体工厂
public class PayServiceFactoryRegistry {
private static final Map FACTORY_MAP = new HashMap<>;
static {
FACTORY_MAP.put);
FACTORY_MAP.put);
}
public static PayServiceFactory getFactory {
PayServiceFactory factory = FACTORY_MAP.get;
if {
throw new IllegalArgumentException;
}
return factory;
}
}
// 使用示例:客户端只依赖注册表和抽象接口
public class OrderService {
public void payOrder {
PayServiceFactory factory = PayServiceFactoryRegistry.getFactory;
PayService payService = factory.createPayService;
payService.pay;
}
}
为什么说它Neng让系统“柔软”?
想象一下你在Zuo一个通知系统,一开始只有邮件通知。
后面老板说:“加个短信吧”。Ru果你用了简单工厂,那得往If‑else里塞新分支,改了几处代码,还可Neng漏掉。
而用工厂方法,只需要新增一个SsNotificationFactory和对应的SsNotification,然后在注册表里加一行映射。
不对不对,应该是SmtpNotification? 哈哈,我刚才脑子短路了。反正就是新增类,不碰老代码。
// 抽象产品:通知接口
public interface Notification { void send; }
// 具体产品:邮件、短信、微信...
public class EmailNotification implements Notification { ... }
public class SmsNotification implements Notification { ... }
public class WechatNotification implements Notification { ... }
// 抽象工厂
public interface NotificationFactory { Notification createNotification; }
// 具体工厂们
public class EmailNotificationFactory implements NotificationFactory { ... }
public class SmsNotificationFactory implements NotificationFactory { ... }
public class WechatNotificationFactory implements NotificationFactory { ... }
// 注册表
public class NotificationFactoryRegistry {
private static final Map MAP = new HashMap<>;
static {
MAP.put);
MAP.put);
MAP.put);
}
public static NotificationFactory get { return MAP.get; }
}
实际项目里怎么玩?来点案例吧
1️⃣ 电商平台接入多种支付渠道。每种渠道dou有自己 SDK,调用方式天差地别。把每个渠道封装成一个PayService实现,再写对应的*ServiceFactory,统一放进注册表。以后想加 Apple Pay,只要再写两个类,别动旧代码。
2️⃣ 日志框架切换。SLF4J 的LoggerFactory.getLogger背后就是工厂方法。换成 Logback、Log4j2,只要改下依赖,业务代码一点不动。
3️⃣ 微服务消费不同 MQ。RabbitMQ、Kafka、RocketMQ 各自实现同一套消费者接口,用各自的*ConsumerFactory注册进去。想换中间件?改配置文件就行。
咱们经常碰到的网站内容被百度抓取不到,这背后其实也有“策略选择”的过程:
A站点结构混乱:A站点没有统一的 URL 生成规则,每次爬虫请求dou被重定向,导致抓取失败。相当于没有固定的“生产线”。
B站点缺少 sitemap:B站点虽然页面hen多,但没有提供 Sitemap.xml 给搜索引擎,相当于没有告诉爬虫去哪儿找资源。
C站点 robots.txt 阻挡:C站点误把重要页面写进了 robots.txt 的 disallow 列表,让爬虫直接走门口打卡,却进不了内部。
答案是:因为没有统一、可 的“抓取策略”。Ru果把每种抓取方式封装成策略对象,用工厂方法动态生成对应策略,就Neng轻松应对不同网站特性,不会像手动硬写一样“一改全崩”。哈哈,说实话,这招在 SEO 工具里Yi经被不少大公司用了呢!你懂的。
什么时候该选简单工厂,什么时候该搬砖用工厂方法?简单工厂:
产品种类极少且几乎不会变动,比如只支持两三种日志实现。
MVP 阶段,需要快速搭建原型,不想花时间拆抽象层。
工厂方法:
#业务增长快,新需求层出不穷,例如电商多渠道支付、多语言通知等场景。
#团队规模大,需要多人协作,各自负责自己的子系统,不希望相互踩坑。
#遵守开闭原则是硬指标,要保证老功Neng上线后不回归错误风险。
A 小技巧,让你的注册表geng友好- 用枚举而不是硬字符串Zuo键值;这样 IDE Neng提示你拼写错误,而不是跑时才报异常。
- 在注册表初始化时打印一次映射关系,方便排查“某类型找不到对应工厂”的问题。
Epilogue:别忘了保持灵活性!AOP、DI、IOC……这些高级特性本质上dou是在帮你把对象创建和使用解耦。而工厂方法模式是Zui原始、Zui直白的一层解耦手段.
Coding 时Ru果发现某块逻辑天天被复制粘贴,那就赶紧给它套上一个“小型”或“完整”的工厂模型吧。不然以后改个名字,你得在十几个地方踢皮球,那叫一个痛苦啊!哈哈哈~
P.S. 小提醒:
💡 多使用接口编程,让 IDE Neng帮你捕捉类型错误;
📅 注册表里的 Map Zui好设为不可变,防止运行时被意外修改;
📝 写单元测试覆盖每个具体工厂,这样新增产品时只需新增对应测试即可验证无误。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback