​大家好,欢迎来到程序视点!我是你们的新朋友.安戈!

设计模式概述:创建型模式的基石

设计模式是软件开发中解决特定问题的经典方案模板,由四位软件工程师(GoF)在《设计模式:可复用面向对象软件的基础》中系统化提出。让我们先中其中的【创建型模式】开始。

【创建型模式】专注于对象创建机制,而工厂模式系列是其中最基础且实用的模式之一。

工厂模式的核心价值

工厂模式通过封装对象创建过程,提供以下优势:

  • 降低代码耦合度

  • 提高系统可扩展性

  • 统一对象创建接口

  • 简化复杂对象的创建过程

简单工厂模式深度解析

模式定义与角色划分

简单工厂模式(Simple Factory Pattern),又称静态工厂方法模式,包含三个核心组件:

  1. 工厂类(PhoneFactory):负责根据输入参数创建具体产品实例

  2. 产品抽象类/接口(Phone):定义所有产品的公共接口

  3. 具体产品类(HuaweiPhone/ApplePhone):实现抽象产品的具体功能

Java实现示例

// 产品接口
public interface Phone {
    String getDescription();
} // 具体产品实现
public class HuaweiPhone implements Phone {
    @Override
    public String getDescription() {
        return "华为旗舰智能手机";
    }
} public class ApplePhone implements Phone {
    @Override
    public String getDescription() {
        return "iPhone系列智能手机";
    }
} // 工厂类
public class PhoneFactory {
    public static Phone createPhone(String brand) {
        switch(brand.toLowerCase()) {
            case "huawei":
                return new HuaweiPhone();
            case "apple":
                return new ApplePhone();
            default:
                throw new IllegalArgumentException("不支持的手机品牌");
        }
    }
}

客户端调用方式

public class Client {
    public static void main(String[] args) {
        Phone huawei = PhoneFactory.createPhone("huawei");
        System.out.println(huawei.getDescription());
        
        Phone iPhone = PhoneFactory.createPhone("apple");
        System.out.println(iPhone.getDescription());
    }
}

模式优缺点与适用场景分析

优势体现

  • 封装创建逻辑:客户端无需了解对象创建细节

  • 接口统一:所有产品通过统一接口访问

  • 降低耦合:客户端与具体产品类解耦

显著缺陷

  1. 违反开闭原则:新增产品类型需修改工厂类源码

  2. 职责过重:工厂类集中了所有创建逻辑

  3. 扩展困难:产品类型增多会导致工厂类臃肿

典型应用场景

  • 产品类型较少且不频繁变化

  • 客户端不关心具体产品创建过程

  • 需要统一管理对象创建逻辑

演进方向:工厂方法模式

简单工厂模式虽然简单实用,但其扩展性问题催生了更灵活的工厂方法模式(Factory Method Pattern)

我们下一篇文章继续为你分享~


最后

【程序视点】助力打工人减负,从来不是说说而已!

后续安戈会继续详细分享更多实用的工具和功能。欢迎关注【程序视点】,这样就不会错过之后的精彩内容啦!

你的 「点赞/收藏」,安戈都看得见哦~

「设计模式详解」工厂模式:简单工厂模式原理、实现与优缺点分析 | 附Java代码示例的更多相关文章

  1. 设计模式详解及PHP实现:代理模式

    [目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...

  2. JAVA设计模式详解(三)----------装饰者模式

    今天LZ带给大家的是装饰者模式,提起这个设计模式,LZ心里一阵激动,这是LZ学习JAVA以来接触的第一个设计模式,也许也是各位接触的第一个设计模式.记得当初老师在讲IO的时候就提到过它:“是你还有你, ...

  3. javascript设计模式详解之命令模式

    每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...

  4. javascript设计模式详解之策略模式

    接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...

  5. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  6. 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...

  7. Javascript设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  8. 16个PHP设计模式详解

    说明:该教程全部截选自实验楼教程[16个PHP设计模式详解]:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了 ...

  9. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  10. Java温故而知新(5)设计模式详解(23种)

    一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...

随机推荐

  1. C++ 迭代器(STL迭代器)iterator详解

    要访问顺序容器和关联容器中的元素,需要通过"迭代器(iterator)"进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可 ...

  2. Java 实现文件和base64字符串互转

    项目中遇到需要将图片转成base64编码的字符串的需求,但是,考虑到扩展性,写了一个可以转换任务类型文件的方法.需要引入的包: <dependency> <groupId>co ...

  3. Hexo博客Next主题更换cdn加速访问

    有时候访问我的博客时,总是会出现cdn.jsdelivr.net无法访问或者访问速度过慢的情况.我的博客园使用的是BNDong/Cnblogs-Theme-SimpleMemory主题,也遇到的这样的 ...

  4. docker | Ubuntu16.04安装与卸载docker

    安装docker sudo apt-get install docker-ce docker-ce-cli containerd.io 卸载docker apt-get purge卸载命令需要逐条执行 ...

  5. 信创迁移必看!X86 迁 Arm 竟能全自动适配?

    在信创技术转型的背景下,X86 到 Arm 架构的迁移确实是不少企业面临的实际挑战.最近在和客户对接信创项目时,我们也深度接触了这类场景,原本基于 X86 架构构建的容器应用,在迁移至 Arm 服务器 ...

  6. 使用scheduler-plugins实现自定义调度器

    一.环境说明 开发环境 部署环境 操作系统 Windows10 Centos7.9 Go版本 go version go1.24.2 windows/amd64 go version go1.23.6 ...

  7. Xshell 详细安装与配置教程:从下载到高效使用

    引言:为什么选择Xshell? 在当今云计算和远程办公时代,高效连接Linux服务器已成为开发者和运维人员的必备技能.Xshell作为业界领先的专业SSH客户端,凭借其卓越的性能.丰富的功能和直观的用 ...

  8. 直播预约丨《袋鼠云大数据实操指南》No.3:数据资产管理实操,如何有效进行数据治理

    近年来,新质生产力.数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕. 面对这些引领经济转型的新兴概念,为了 ...

  9. 直击运维痛点,大数据计算引擎 EasyMR 的监控告警设计优化之路

    当企业的业务发展到一定的阶段时,在系统中引入监控告警系统来对系统/业务进行监控是必备的流程.没有监控或者没有一个好的监控,会导致开发人员无法快速判断系统是否健康:告警的实质则是"把人当服务用 ...

  10. hot100之数组

    最大子数组和(053) 先看代码 class Solution { public int maxSubArray(int[] nums) { int n = nums.length; int subS ...