23种设计模式之工厂模式

详解APM的开方控制器sqrt_controller 前言 前面说过,sqrt_controller是对P项进行整定用途的,目的就是让P项的控制响应“软”下来,实际上就是一个经过改进的P控制器。读懂了sqrt_controller,那么你对APM的P控制器就了解得差不多了。 仅讨论P控制器,sqrt_controller的作用就是设定一个量linear_dist,以这个量的正负值为分界线划分出一个线性区域范围,在这个范围内表示误差量还很小,遵循Kp*error计算方式输出控制量。 超过linear_dist后,表明误差较大,此时不能由着误差单纯按照线性方式乘以 阅读详情

工厂模式属于创建型设计模式,核心思想:封装对象创建逻辑,统一生产对象,隔离对象创建与使用。

工厂模式分三大类:

  1. 简单工厂(静态工厂)

    1 个工厂 + N 个产品,工厂依赖抽象产品
  2. 工厂方法

    N 个工厂 + N 个产品,1 个工厂对应 1 个产品
  3. 抽象工厂

    N 个工厂 + 多组产品(产品族),1 个工厂对应一整套产品

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

1. 定义

由一个工厂类负责创建所有产品实例,根据传入参数决定创建哪一个对象。不属于 GoF 23 种标准设计模式

2. 角色

  • 抽象产品:产品统一接口/父类

  • 具体产品:接口实现类

  • 工厂类:核心,包含创建对象逻辑

3. 适用场景

产品种类少、创建逻辑简单,客户端只需传入标识就能获取对象。

4. 代码和UMl类图


// 1. 抽象产品
public interface Fruit {
    void eat();
}

// 2. 具体产品
class Apple implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果");
    }
}
class Banana implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃香蕉");
    }
}

// 3. 工厂类
class FruitFactory {
    // 静态方法:简单工厂核心
    public static Fruit createFruit(String type) {
        if ("apple".equals(type)) {
            return new Apple();
        } else if ("banana".equals(type)) {
            return new Banana();
        }
        return null;
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Fruit apple = FruitFactory.createFruit("apple");
        apple.eat();
    }
}

5. 优缺点

  • 优点:创建逻辑集中,客户端不用 new 对象

  • 缺点:违背开闭原则,新增产品必须修改工厂代码;产品多时代码臃肿


二、工厂方法模式(Factory Method)⭐ 标准23种模式之一

1. 定义

一个产品对应一个工厂,定义抽象工厂接口,让具体工厂创建对应具体产品。

完全遵循开闭原则:新增产品只需要新增对应工厂,不修改原有代码。

2. 角色

  • 抽象产品

  • 具体产品

  • 抽象工厂:定义创建产品的抽象方法

  • 具体工厂:实现抽象工厂,生产对应产品

3. 适用场景

产品种类较多,且频繁新增产品,需要严格遵守开闭原则。

4. 代码和uml类型图


// 1. 抽象产品
public interface Fruit {
    void eat();
}
// 具体产品
class Apple implements Fruit {
    @Override
    public void eat() { System.out.println("吃苹果"); }
}
class Banana implements Fruit {
    @Override
    public void eat() { System.out.println("吃香蕉"); }
}

// 2. 抽象工厂
public interface FruitFactory {
    Fruit createFruit();
}

// 3. 具体工厂
class AppleFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}
class BananaFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Banana();
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        FruitFactory factory = new AppleFactory();
        Fruit fruit = factory.createFruit();
        fruit.eat();
    }
}

​

5. 优缺点

  • 优点:遵守开闭原则;单一职责,一个工厂只生产一种产品

  • 缺点:类数量爆炸,每加一个产品就要加一个工厂类


三、抽象工厂模式(Abstract Factory)⭐ 标准23种模式之一

1. 定义

工厂生产「产品族」,而非单个产品。

  • 产品族:一组相关/配套的产品(如:手机 + 耳机 一套数码产品)

  • 产品等级:同类型不同品牌(如:小米手机、华为手机)

2. 核心区别(对比工厂方法)

  • 工厂方法:一个工厂只生产一类产品(单一产品)

  • 抽象工厂:一个工厂生产一整套产品(产品族)

3. 角色

  • 抽象产品(多个:产品A、产品B)

  • 具体产品

  • 抽象工厂:定义多个创建方法,对应不同产品

  • 具体工厂:实现整套产品的创建

4. 适用场景

系统存在多组配套产品,产品之间有约束、必须搭配使用。

5. 代码(Java)和uml类图

场景:数码产品族(手机、耳机),两个品牌:小米、华为


// ===== 抽象产品 =====
// 手机抽象
public interface Phone {
    void call();
}
// 耳机抽象
public interface Headset {
    void listen();
}
​
// ===== 具体产品 =====
// 小米产品
class XiaomiPhone implements Phone {
    @Override
    public void call() { System.out.println("小米手机通话"); }
}
class XiaomiHeadset implements Headset {
    @Override
    public void listen() { System.out.println("小米耳机听歌"); }
}
// 华为产品
class HuaweiPhone implements Phone {
    @Override
    public void call() { System.out.println("华为手机通话"); }
}
class HuaweiHeadset implements Headset {
    @Override
    public void listen() { System.out.println("华为耳机听歌"); }
}
​
// ===== 抽象工厂(生产整套产品) =====
public interface DigitalFactory {
    Phone createPhone();
    Headset createHeadset();
}
​
// ===== 具体工厂(品牌工厂,生产整个产品族) =====
class XiaomiFactory implements DigitalFactory {
    @Override
    public Phone createPhone() { return new XiaomiPhone(); }
    @Override
    public Headset createHeadset() { return new XiaomiHeadset(); }
}
class HuaweiFactory implements DigitalFactory {
    @Override
    public Phone createPhone() { return new HuaweiPhone(); }
    @Override
    public Headset createHeadset() { return new HuaweiHeadset(); }
}
​
// 客户端
public class Client {
    public static void main(String[] args) {
        DigitalFactory factory = new XiaomiFactory();
        Phone phone = factory.createPhone();
        Headset headset = factory.createHeadset();
        phone.call();
        headset.listen();
    }
}

6. 优缺点

  • 优点:保证产品族配套使用;新增品牌工厂方便(苹果工厂),符合开闭

  • 缺点:新增产品等级非常麻烦(比如新增「手表」,所有工厂都要改)


四、三种工厂模式对比总结

模式特点开闭原则适用场景
简单工厂单工厂、多产品,靠参数判断不满足产品固定、很少新增
工厂方法一产品对应一工厂满足单一产品类型,频繁加产品
抽象工厂工厂生产整套产品族产品族扩展友好,产品等级扩展困难多组配套产品

五、实际开发使用建议

  1. 简单工厂:日常快速开发、工具类、内部组件最常用

  2. 工厂方法:框架、开源组件、需要持续迭代扩展的模块

  3. 抽象工厂:电商多产品线、软硬件配套、跨平台多组件场景

六、常见面试考点

  1. 工厂模式的作用:解耦对象创建与使用、统一管理实例、屏蔽创建细节

  2. 简单工厂为什么不算标准23种设计模式?破坏开闭原则

  3. 工厂方法 vs 抽象工厂:单一产品 vs 产品族

  4. 开闭原则在三种模式中的体现

100天精通Python(基础篇)——第3天:运算符全解析(算术运算符、比较运算符、逻辑运算符、赋值运算符及其优先级规则) 阅读详情

相关推荐

超详细版!Obsidian+Claude+Skills+云同步,打造智能 AI 知识库

本文介绍如何搭建高效的AI知识管理系统,将Obsidian笔记工具与ClaudeAI助手深度整合。通过ClaudeCode安装配置、ObsidianSkills插件添加和坚果云同步设置,实现本地存储安全性与云端便捷性的完美结合。该系统支持智能笔记整理、知识图谱可视化、智能搜索问答和内容创作辅助等功能,使静态笔记转变为能自动分析关联、处理复杂结构的"活"知识库。详细步骤包括工具准备、环境配置、插件安装和云同步设置

2301_79998006的博客 1084

设计模式之工厂模式

工厂模式 1、简单工厂模式 1.1、定义 简单工厂模式(Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。 简单工厂是产品的工厂 1.2、应用场景 简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。 1.3、缺点 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。 不易于扩展过于复杂的产品结构。 1.4、实例 支付接口规范: public interface

aaa31203的博客 16万+

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4146

【设计模式】工厂模式(Factory Pattern)

工厂模式

qq_27198345的博客 1万+

abaqus应力值导出并进行后处理(同一节点多个应力值如何处理?)

Abaqus应力导出: ‘Tools’--- Probe values 在Probe Values里面可以选择需要导出的信息,比如‘Nodes’或者‘Elements’ 如果需要导出多个应力值或者其他信息可以选择‘Components’这个选项。 选择‘Selected’只输出一个正应力S33(对应截图中的) 如果是‘All Direct’,则是输出6个正应力S11, S22, S33, S12, S13, S23 ‘All Principals’输出三个正应力 在输出...

themingyi的博客 5万+

GNSS数据资源全解析:从DCB到BSX文件的下载与应用指南

本文系统解析了GNSS数据处理所需的核心数据资源,包括DCB、BSX、SP3、CLK等关键文件的官方下载路径与应用方法。详细介绍了CDDIS、武汉大学镜像站等权威数据源,并提供了从数据下载到实际应用的完整指南,帮助用户高效获取GNSS数据,提升精密定位处理效率。

weixin_29246195的博客 141

设计模式第3讲——工厂模式(Factory)

工厂模式是一种创建型设计模式。一、什么是工厂模式 二、工厂分类 三、应用场景3.1 生活场景3.2 java场景 四、 工厂模式实现4.0 代码结构4.1 传统模式4.2 简单工厂模式4.3 方法工厂模式4.4 抽象工厂模式五、总结5.1 简单工厂模式5.2 方法工厂模式5.3 抽象工厂

让~学习~成为一种习惯(橡 皮 人の技术博客) 1万+

开源有限元dealii学习——step-1

#简介 dealii是一款开源的求解偏微分方程的有限元软件,它优点: 1.多种单元类型 2.可以自适应网格 3.文档和范例齐全 4.与其它库有良好的接口 5.使用c++编写 #安装 dealii可以在官网上或者github上下载源码,解压后进入源文件目录安装。 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/path/to/install...

weixin_42312251的博客 4386

工厂设计模式

1、概念 工厂模式分三种:简单工厂模式、工厂方法模式、抽象工厂模式 简单工厂模式(Simple Factory Pattern):属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式严重违背了“开闭原则”,难以拓展。 工厂方法模式(Factory Method):定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为

elapse008的专栏 5813

YOLOv8工业缺陷检测实战:攻克光照不均难题,精度从70%到92%的全流程优化(附缺陷数据集)

YOLOv8在工业缺陷检测中突破光照不均难题,核心是“硬件控光+数据造景+模型聚焦+训练攻坚硬件控光:从源头减少光照变异,降低算法难度;数据造景:用CLAHE、合成样本让模型“见过足够多的光照情况”;模型聚焦:用ECA注意力和Focal-EIoU损失,让模型盯住缺陷而非光照;训练攻坚:分阶段+难例挖掘,强迫模型学习薄弱点。这套方案已在汽车轴承、手机外壳、PCB板3类产线落地,平均精度提升20%+,漏检率控制在0.08%以内,完全满足工业级要求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1196

56、宇宙微波背景辐射(CMB)望远镜及光学系统解析

本文详细解析了宇宙微波背景辐射(CMB)望远镜及其光学系统,重点介绍了交叉德拉贡系统的结构特点、偏振测量误差及其控制、以及大型地面望远镜如ACT和SPT的设计与对比。同时,总结了不同光学系统和探测器阵列的优劣势,并展望了未来发展方向,旨在为CMB研究提供更高效的工具和技术支持。

f9g0h的博客 244

工厂模式(详解)

工厂模式是一种创建对象的设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂模式让类的实例化推迟到子类。简单来说,工厂模式通过创建一个专门负责创建对象的工厂类,将对象的创建过程封装起来,以此达到解耦的目的。

weixin_67417798的博客 7580

基于STM32的浴室环境智能控制系统设计

摘要:本文设计了一款基于STM32F103的智能卫浴系统,通过多传感器协同检测浴室环境参数。系统采用DS18B20检测环境与卫浴温度,DHT11监测湿度,MQ-135检测空气质量,光敏电阻测量光照强度,D203S人体热释电模块检测人员存在。当检测到异常参数时,系统自动启动相应调节功能:温度异常时控制加热/制冷继电器,湿度过高时启动通风除湿,空气质量差时进行换气,光照不足且有人时自动开灯。系统支持按键、蓝牙APP和语音三种控制方式,可手动设置参数阈值、切换防雾模式、控制音乐播放等功能。实验结果表明,该系统能有

3254968421的博客 485

23种设计模式——工厂模式

23种设计模式——工厂模式 作用:实现了创建者与调用者的分离 详细分类: 1、简单(静态)工厂模式:用来生产同一等级结构中的任意产品(对于增加新的代码,需要覆盖已有代码) 2、工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品) 3、抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂 工厂模式核心本质: 1、实例化对象不再使用new,用工厂方法代替 2、将...

qq_44370455的博客 289

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GOF23---工厂设计模式练习代码和随笔

GOF23学习练习代码 创建型设计模式 一、工厂方法 1.工厂类 /** * 抽象工厂 */ public interface PayFactory{ Pay getPayProduct(); } public class AlipayFactory implements PayFactory { @Override public Pay getPayProduct() { return new AlipayProduct(); } } pu

KevinLoveJava 446

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

GOF23设计模式之工厂模式

GOF23设计模式之工厂模式   工厂模式实现了创建者和调用者的分离。    分为:简单工厂、工厂方法、抽象工厂  面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。 ...

weixin_30278237的博客 93

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java 23 种设计模式概述 与 简单工厂模式

目录 Java 设计模式概述 设计模式六大原则 简单工厂模式 普通简单工厂 多方法简单工厂 静态方法简单工厂 Java 设计模式概述 1、Java 23 种设计模式总体来说分为三大类: 1)创建型模式共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式 、原型模式 2)结构型模式共七种:适配器模式、 装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 3)行...

蚩尤后裔-汪茂雄 1358

23种设计模式学习记录之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 1 简单工厂模式(simplefactory) 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使用:我们明确地计划不同条件下创建不同实例时。 如何解决:让其子类

lx9876lx的博客 354

厚积薄发打卡Day29 :[kuangStudy] GoF23通俗易懂的设计模式之 <工厂模式>

前言: 视频教程:狂神说Java之通俗易懂的23种设计模式 什么是设计模式? 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。 它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的 解决方案. 1995年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软 件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称 【GoF设计模式】 GoF23: 一种思维,一种

COOLGWAYNE_TECH_BLOG 393

23种java设计模式之:建造者模式、工厂方法模式、抽象工厂模式!

本文重点介绍java 23种设计模式中 5种创建型模型的后三种模式:建造者模式、工厂方法模式、抽象工厂模式。内容用思维导图的方式来表现。后面的文章将继续介绍java 23种设计模式。如果大家喜欢这些内容,请友好三连击!关“Java进阶营”,这样收看更多的精彩文章就不会迷路。java设计模式 工厂方法模式。java设计模式 抽象工厂模式。java设计模式 建造者模式。

m0_54850952的博客 472

【设计模式】| 修炼内功 | 23种设计模式——工厂方法模式(含抽象)

本文分享了23种设计模式之一的工厂方法模式(含抽象),小伙伴们一起干起来叭!!!

狮子也疯狂的博客 961

【GOF23设计模式】工厂模式

【GOF23设计模式】工厂模式 来源:http://www.bjsxt.com/一、【GOF23设计模式】_简单工厂模式详解、面向对象设计原则、开闭原则、依赖反转原则、迪米特法则 没有工厂模式的情况 1 package com.test.factory.simple; 2 3 public interface Car...

weixin_30319153的博客 147

01_23 种设计模式之《简单工厂模式》

设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,特定问题的解决方案,基于面向对象的设计原则:主要是对接口编程而不是对实现编程、优先使用对象组合而不是继承首先,定义一个抽象产品类和几个具体产品类。这些类将实现一个共同的接口。

2302_79752447的博客 814

23种设计模式——三大工厂模式

23种设计模式——三大工厂模式 什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。一共有三种设计模式,分别是简单工厂模式,方法工厂模式,抽象工厂模式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 使用工厂模式的好处 解耦 通过工厂模式可以把对象的创建和使用过程分割开来。比如说 Class A 想调用 Class B的方法,那么我们无需关心B是如何创建的,直接去工厂获取就行。 减少代码量,易于维护 如

weixin_43145539的博客 375
上一篇: ResNet18 微调步骤(冻结骨干微调 / 全参数微调)
下一篇: 23种设计模式全解析(GoF 设计模式)
王_teacher
博客等级 码龄9年 118粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值