news 2026/4/18 7:43:29

工厂模式详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工厂模式详解

在设计模式中,工厂模式属于创建型模式,核心是封装对象的创建过程,降低代码耦合度。根据抽象程度和应用场景的不同,工厂模式主要分为3 种,由简单到复杂依次是:

一、简单工厂模式(Simple Factory)

核心特点

  • 不属于 GoF 23 种经典设计模式,是一种 “简易实现”,也叫静态工厂模式
  • 定义一个工厂类,通过静态方法接收参数,根据参数类型创建不同的产品实例。
  • 产品类需要继承同一个抽象产品类或实现同一个接口。

适用场景:产品类型较少且相对固定,不需要频繁扩展新产品。

代码示例

// 抽象产品 public interface Phone { void make(); } // 具体产品1 public class IPhone implements Phone { @Override public void make() { System.out.println("生产苹果手机"); } } // 具体产品2 public class HuaweiPhone implements Phone { @Override public void make() { System.out.println("生产华为手机"); } } // 简单工厂类 public class PhoneFactory { // 静态工厂方法 public static Phone createPhone(String type) { if ("iphone".equals(type)) { return new IPhone(); } else if ("huawei".equals(type)) { return new HuaweiPhone(); } throw new IllegalArgumentException("不支持的手机类型"); } } // 测试 public class Test { public static void main(String[] args) { Phone iphone = PhoneFactory.createPhone("iphone"); iphone.make(); // 输出:生产苹果手机 } }

缺点:新增产品时需要修改工厂类的代码,违反开闭原则

二、工厂方法模式(Factory Method)

核心特点

  • 属于 GoF 23 种经典设计模式。
  • 定义一个抽象工厂接口,每个具体产品对应一个具体工厂类,由具体工厂负责创建对应的产品实例。
  • 抽象工厂只定义创建产品的方法,具体实现交给子类。

适用场景:产品类型较多,且需要频繁扩展新的产品,符合开闭原则。

代码示例

// 抽象产品 public interface Phone { void make(); } // 具体产品1 public class IPhone implements Phone { @Override public void make() { System.out.println("生产苹果手机"); } } // 具体产品2 public class HuaweiPhone implements Phone { @Override public void make() { System.out.println("生产华为手机"); } } // 抽象工厂 public interface PhoneFactory { Phone createPhone(); } // 具体工厂1:生产苹果手机 public class IPhoneFactory implements PhoneFactory { @Override public Phone createPhone() { return new IPhone(); } } // 具体工厂2:生产华为手机 public class HuaweiFactory implements PhoneFactory { @Override public Phone createPhone() { return new HuaweiPhone(); } } // 测试 public class Test { public static void main(String[] args) { PhoneFactory factory = new IPhoneFactory(); Phone phone = factory.createPhone(); phone.make(); // 输出:生产苹果手机 } }

优点:新增产品时只需添加对应的具体产品类具体工厂类,无需修改原有代码,符合开闭原则。缺点:产品和工厂成对增加,会导致类的数量增多,增加系统复杂度。

三、抽象工厂模式(Abstract Factory)

核心特点

  • 属于 GoF 23 种经典设计模式,是工厂方法模式的升级版本
  • 抽象工厂不仅创建一种产品,而是创建一族相关的产品(产品族),且产品之间通常存在关联或依赖关系。
  • 定义一个抽象工厂接口,包含多个创建不同产品的方法;每个具体工厂类负责创建同一产品族的所有产品实例。

适用场景:需要创建一组相关联的产品,且产品族的结构相对稳定。

代码示例(Java)

// --- 产品族1:手机 --- public interface Phone { void make(); } public class IPhone implements Phone { @Override public void make() { System.out.println("生产苹果手机"); } } public class HuaweiPhone implements Phone { @Override public void make() { System.out.println("生产华为手机"); } } // --- 产品族2:电脑 --- public interface Computer { void make(); } public class Mac implements Computer { @Override public void make() { System.out.println("生产苹果电脑"); } } public class MateBook implements Computer { @Override public void make() { System.out.println("生产华为电脑"); } } // --- 抽象工厂:生产电子设备族 --- public interface ElectronicFactory { Phone createPhone(); Computer createComputer(); } // --- 具体工厂1:苹果工厂(生产苹果手机+苹果电脑) --- public class AppleFactory implements ElectronicFactory { @Override public Phone createPhone() { return new IPhone(); } @Override public Computer createComputer() { return new Mac(); } } // --- 具体工厂2:华为工厂(生产华为手机+华为电脑) --- public class HuaweiFactory implements ElectronicFactory { @Override public Phone createPhone() { return new HuaweiPhone(); } @Override public Computer createComputer() { return new MateBook(); } } // 测试 public class Test { public static void main(String[] args) { ElectronicFactory factory = new AppleFactory(); Phone phone = factory.createPhone(); Computer computer = factory.createComputer(); phone.make(); // 输出:生产苹果手机 computer.make(); // 输出:生产苹果电脑 } }

优点:可以确保同一工厂生产的产品属于同一产品族,避免不兼容的产品组合。缺点:新增产品族时符合开闭原则,但新增产品类型(如在电子设备中新增平板)时,需要修改抽象工厂和所有具体工厂的代码,违反开闭原则。

四、三种工厂模式的对比

模式类型核心思想适用场景开闭原则兼容性
简单工厂模式单一工厂类 + 静态方法创建产品产品类型少、固定不兼容
工厂方法模式一个产品对应一个工厂类产品类型多、需频繁扩展兼容(扩展产品)
抽象工厂模式一个工厂创建一族相关产品需创建关联产品族兼容(扩展产品族)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:47:21

AI生成内容降重指南:权威工具榜单与实操方法

核心工具对比速览 工具名称 处理时间 AIGC降幅 重复率同步优化 适配检测系统 aibiye 20分钟 降至个位数 ✔️支持 知网/格子达/维普 aicheck 20分钟 降至个位数 ✔️支持 知网/格子达/维普 秒篇 15分钟 降至10%以下 ✔️支持 主流检测平台 AskPaper 25分钟…

作者头像 李华
网站建设 2026/4/18 3:26:50

数字化选题工具排行榜:10大平台功能解析与本科生实操策略

学术写作中难免遇到重复率过高的问题,现代人工智能技术为此提供了多种智能解决方案。通过对比测试发现,目前市场上有六种效果显著的智能降重系统,能够有效帮助研究者解决论文相似度过高的困扰。这些工具采用先进的自然语言处理算法&#xff0…

作者头像 李华
网站建设 2026/4/18 3:26:50

摆脱论文重复烦恼:7大AI降重网站深度评测

�� 论文查重工具核心特点对比 工具名称 查重速度 数据库覆盖 价格区间 适用场景 特色功能 AIcheck 极快 超全 中高 深度查重/学术规范检测 实时降重/AIGC检测 知网 中等 最全 高 终稿定稿查重 高校认可度高 维普 快 较全 中 中期查…

作者头像 李华
网站建设 2026/4/18 3:26:55

OneMore终极指南:如何用免费插件大幅提升OneNote使用效率

OneMore终极指南:如何用免费插件大幅提升OneNote使用效率 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款专为Microsoft OneNote设计的开源增…

作者头像 李华
网站建设 2026/4/18 3:25:54

2025年AI视频生成工具全景图:从Sora到即梦,开发者如何抓住新风口?

摘要:当OpenAI的Sora以电影级画质震撼世界,当快手可灵、Luma等工具让“想象力”瞬间变现,我们站在了AI视频生成的爆发前夜。本文不仅仅是一份工具清单,更是一篇面向开发者的深度指南。我们将揭秘DiT架构背后的“魔法”&#xff0c…

作者头像 李华
网站建设 2026/4/18 3:31:01

3分钟搞定Zotero-GPT插件API密钥配置:新手必看终极指南

3分钟搞定Zotero-GPT插件API密钥配置:新手必看终极指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 在使用Zotero-GPT插件时遇到"your secretKEY is not configured"错误?别…

作者头像 李华