创建型 工厂模式

简介: 工厂模式包含三种变体:简单工厂(集中创建,适合逻辑简单场景)、工厂方法(抽象工厂接口+多实现类,符合开闭原则,应对复杂创建逻辑)和抽象工厂(统一创建多个关联对象,适用于产品族场景)。三者均用于封装对象创建过程,提升复用性与可维护性。(239字)

工厂模式分为 简单工厂、工厂方法模式、抽象工厂
简单工厂
/
简单工厂
/
public class SharePlatformFactory {
private static final Map platformMap = new HashMap();

static {
    platformMap.put("qq", new QQShare());
    platformMap.put("wechat", new WeChatShare());
    platformMap.put("ali", new AliPayShare());
}

/**
 * 拿取已经创建的对象 可以复用对象
 * @param platform
 * @return
 */
public static IShare createPlatform(String platform){
    if(TextUtils.isEmpty(platform)){
        return null;
    }
    return platformMap.get(platform);
}

/**
 * 这样每次都会创建新的对象
 * @param platform
 * @return
 */
public static IShare createPlatform2(String platform){
    if(TextUtils.isEmpty(platform)){
        return null;
    }
    IShare sharePlatform = null;
    switch (platform){
        case "qq":
            sharePlatform = new QQShare();
            break;
        case "wechat":
            sharePlatform = new WeChatShare();
            break;
        case "ali":
            sharePlatform = new AliPayShare();
            break;
    }
    return sharePlatform;
}

}
工厂方法模式就是将上面的创建工厂平台的方法,抽象出一个工厂接口,然后创建不同的工厂,在工厂里面去创建相对应的对象,然后再使用一个简单工厂来创建不同的工厂,这样会比较符合开闭原则。
工厂方法模式
//因为工厂类只包含方法,不包含成员变量,完全可以复用,
// 不需要每次都创建新的工厂类对象,所以,简单工厂模式的第二种实现思路更加合适。
//工厂方法模式
public class RuleConfigParserFactoryMap {
//工厂的工厂
private static final Map cachedFactories = new HashMap<>();
static {
cachedFactories.put("json", new JsonRuleConfigParserFactory());
cachedFactories.put("xml", new XmlRuleConfigParserFactory());
cachedFactories.put("yaml", new YamlRuleConfigParserFactory());
cachedFactories.put("properties", new PropertiesRuleConfigParserFactory());
}
public static IRuleConfigParserFactory getParserFactory(String type) {
if (type == null || type.isEmpty())
{ return null; }
IRuleConfigParserFactory parserFactory = cachedFactories.get(type.toLowerCase());
return parserFactory; }
}
当对象的创建逻辑比较复杂,不只是简单的 new 一下就可以,而是要组合其他类对象,做各种初始化操作的时候,我们推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中,让每个工厂类都不至于过于复杂。而使用简单工厂模式,将所有的创建逻辑都放到一个工厂类中,会导致这个工厂类变得很复杂。
抽象工厂

工厂模式的使用场景:
当每个对象的创建逻辑都比较简单的时候,我推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,我推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。

工厂模式的作用:
封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。
代码复用:创建代码抽离到独立的工厂类之后可以复用。
隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。
控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。

  1. 简单工厂(Simple Factory)
    使用场景:
    a. 当每个对象的创建逻辑都比较简单的时候,将多个对象的创建逻辑放到一个工厂类中。
    实现:
    a. if else 创建不同的对象。
    b. 用单例模式 + 简单工厂模式结合来实现。
    1. 工厂方法(Factory Method)
      使用场景:
      a. 当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类时,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。
      b. 避免很多 if-else 分支逻辑时。
      实现:
      a. 定义相应的ParserFactory接口,每个工厂定义一个实现类。这种方式使用会有多个if else 让使用更加复杂。
      b. 创建工厂的工厂来,此方案可以解决上面的问题。
    2. 抽象工厂(Abstract Factory)- 不常用
      使用场景:
      a. 有多种分类方式,如方式要用一套工厂方法,方式二要用一套工厂方法,详见原文例子。
      实现:
      让一个工厂负责创建多个不同类型的对象(IRuleConfigParser、ISystemConfigParser 等),而不是只创建一种 parser 对象。
相关文章
|
3月前
|
人工智能 供应链 搜索推荐
GEO 深度进阶:从入门到行业实战的完整路径
本文揭秘GEO(生成式引擎优化)本质:非SEO升级,而是内容价值传递范式转移。指出AI不“找”内容而“读”内容,强调结构化、可提取、可验证的“引用友好型”内容设计。通过餐饮、教育、SaaS三大行业实战案例,拆解从“被收录”到“被首选引用”的进阶路径,助你构建AI时代的内容护城河。
326 1
钉钉免登(Single Sign-On, SSO)
钉钉免登(Single Sign-On, SSO)
1301 0
|
3月前
|
人工智能 缓存 运维
AI 网关 FinOps 最佳实践:如何为不同消费者控制 AI 调用预算
本文面向 AI 网关使用者,帮助您建立一套完善的消费者 AI FinOps 治理体系。
364 22
|
3月前
|
人工智能 算法 机器人
生活固废垃圾分类目标检测数据集:5类别 | 目标检测
本数据集面向生活固废智能分类,涵盖玻璃、金属、纸张、塑料、废弃物5类常见垃圾,采用YOLO标准标注,含训练/验证/测试集,适配YOLO系列及主流检测模型,助力垃圾分类AI系统研发与落地。(239字)
177 1
生活固废垃圾分类目标检测数据集:5类别 | 目标检测
|
3月前
|
API 开发者 索引
OAN 不是 MCP、A2A、ANP 的替代品:它补的是信任基础设施层
MCP、A2A、ANP、HTTP API 等协议分别解决工具连接、智能体协作、网络寻址和接口调用问题,但它们并不天然回答资源身份、可信发布和可验证发现的问题。本文说明 OAN 与这些协议的关系不是替代,而是补足底层信任基础设施:让 Agent Service、Skill、MCP Server 和 Tool/API 在保留原有交互方式的同时,获得统一标识、治理边界、Root Proof 和可信发现能力。
|
2月前
|
人工智能 自然语言处理 安全
阿里云千问办公活动:一站式AI生产力平台,限时限量积分加倍
千问办公是阿里巴巴全新推出的一站式 AI 办公平台,不止于对话,更注重交付——用户仅需一句话,即可完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务,直接获得可用成果。目前已全面覆盖桌面端、网页端,并深度接入钉钉生态,依托个人云盘、IM、连接器等模块打通数据与设备,让 AI 真正融入工作流,随时随地响应办公需求。
|
3月前
|
人工智能 算法 机器人
10个行业AI搜索获客实战:从本地餐饮到工业制造的GEO策略
AI搜索正取代传统SEO,用户从“点击链接”转向“直接要答案”。本文基于餐饮、装修、法律等10大行业实战,揭示GEO(生成式引擎优化)本质:不求被搜到,而要成为AI主动推荐的“唯一答案”。通过认知重塑、策略原点、行业剖解与系统飞轮四步,助企业预制结构化“答案单元”,抢占AI时代获客先机。
274 2
|
3月前
|
缓存 监控 测试技术
【剪映小助手】链接提取接口(Get Url)
链接提取接口是草稿自动化关键组件,用于解析并提取视频/素材URL。依托FastAPI与Pydantic构建,具备异步高并发处理能力,依赖清晰分层(路由→服务→模型→工具)。支持快速验证、缓存优化与结构化错误排查,OpenAPI为准。(239字)
|
3月前
|
人工智能 自然语言处理 搜索推荐
企业如何用好智能客服系统?2026年真实案例拆解
智能客服的成败,三分靠选型,七分靠运营。2026年,超92%的企业已部署AI客服,但仅35%真正跑出了效能——差距不在"有没有",而在"会不会用"。本文拆解星巴克、长城汽车、东风猛士等企业的真实落地路径,提炼出一套"选对平台→分阶段落地→持续运营"的三步闭环方法论。
|
3月前
|
设计模式

热门文章

最新文章