「设计模式详解」工厂模式:简单工厂模式原理、实现与优缺点分析 | 附Java代码示例
大家好,欢迎来到程序视点!我是你们的新朋友.安戈!
设计模式概述:创建型模式的基石
设计模式是软件开发中解决特定问题的经典方案模板,由四位软件工程师(GoF)在《设计模式:可复用面向对象软件的基础》中系统化提出。让我们先中其中的【创建型模式】开始。
【创建型模式】专注于对象创建机制,而工厂模式系列是其中最基础且实用的模式之一。
工厂模式的核心价值
工厂模式通过封装对象创建过程,提供以下优势:
降低代码耦合度
提高系统可扩展性
统一对象创建接口
简化复杂对象的创建过程
简单工厂模式深度解析
模式定义与角色划分
简单工厂模式(Simple Factory Pattern),又称静态工厂方法模式,包含三个核心组件:
工厂类(PhoneFactory):负责根据输入参数创建具体产品实例
产品抽象类/接口(Phone):定义所有产品的公共接口
具体产品类(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());
}
}

模式优缺点与适用场景分析
优势体现
封装创建逻辑:客户端无需了解对象创建细节
接口统一:所有产品通过统一接口访问
降低耦合:客户端与具体产品类解耦
显著缺陷
违反开闭原则:新增产品类型需修改工厂类源码
职责过重:工厂类集中了所有创建逻辑
扩展困难:产品类型增多会导致工厂类臃肿
典型应用场景
产品类型较少且不频繁变化
客户端不关心具体产品创建过程
需要统一管理对象创建逻辑
演进方向:工厂方法模式
简单工厂模式虽然简单实用,但其扩展性问题催生了更灵活的工厂方法模式(Factory Method Pattern)
我们下一篇文章继续为你分享~
最后
【程序视点】助力打工人减负,从来不是说说而已!
后续安戈会继续详细分享更多实用的工具和功能。欢迎关注【程序视点】,这样就不会错过之后的精彩内容啦!
你的 「点赞/收藏」,安戈都看得见哦~
「设计模式详解」工厂模式:简单工厂模式原理、实现与优缺点分析 | 附Java代码示例的更多相关文章
- 设计模式详解及PHP实现:代理模式
[目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...
- JAVA设计模式详解(三)----------装饰者模式
今天LZ带给大家的是装饰者模式,提起这个设计模式,LZ心里一阵激动,这是LZ学习JAVA以来接触的第一个设计模式,也许也是各位接触的第一个设计模式.记得当初老师在讲IO的时候就提到过它:“是你还有你, ...
- javascript设计模式详解之命令模式
每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...
- javascript设计模式详解之策略模式
接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)
什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...
- Javascript设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- 16个PHP设计模式详解
说明:该教程全部截选自实验楼教程[16个PHP设计模式详解]:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了 ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- Java温故而知新(5)设计模式详解(23种)
一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...
随机推荐
- C++ 迭代器(STL迭代器)iterator详解
要访问顺序容器和关联容器中的元素,需要通过"迭代器(iterator)"进行,迭代器是一个变量,相当于容器和操作容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可 ...
- Java 实现文件和base64字符串互转
项目中遇到需要将图片转成base64编码的字符串的需求,但是,考虑到扩展性,写了一个可以转换任务类型文件的方法.需要引入的包: <dependency> <groupId>co ...
- Hexo博客Next主题更换cdn加速访问
有时候访问我的博客时,总是会出现cdn.jsdelivr.net无法访问或者访问速度过慢的情况.我的博客园使用的是BNDong/Cnblogs-Theme-SimpleMemory主题,也遇到的这样的 ...
- docker | Ubuntu16.04安装与卸载docker
安装docker sudo apt-get install docker-ce docker-ce-cli containerd.io 卸载docker apt-get purge卸载命令需要逐条执行 ...
- 信创迁移必看!X86 迁 Arm 竟能全自动适配?
在信创技术转型的背景下,X86 到 Arm 架构的迁移确实是不少企业面临的实际挑战.最近在和客户对接信创项目时,我们也深度接触了这类场景,原本基于 X86 架构构建的容器应用,在迁移至 Arm 服务器 ...
- 使用scheduler-plugins实现自定义调度器
一.环境说明 开发环境 部署环境 操作系统 Windows10 Centos7.9 Go版本 go version go1.24.2 windows/amd64 go version go1.23.6 ...
- Xshell 详细安装与配置教程:从下载到高效使用
引言:为什么选择Xshell? 在当今云计算和远程办公时代,高效连接Linux服务器已成为开发者和运维人员的必备技能.Xshell作为业界领先的专业SSH客户端,凭借其卓越的性能.丰富的功能和直观的用 ...
- 直播预约丨《袋鼠云大数据实操指南》No.3:数据资产管理实操,如何有效进行数据治理
近年来,新质生产力.数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕. 面对这些引领经济转型的新兴概念,为了 ...
- 直击运维痛点,大数据计算引擎 EasyMR 的监控告警设计优化之路
当企业的业务发展到一定的阶段时,在系统中引入监控告警系统来对系统/业务进行监控是必备的流程.没有监控或者没有一个好的监控,会导致开发人员无法快速判断系统是否健康:告警的实质则是"把人当服务用 ...
- hot100之数组
最大子数组和(053) 先看代码 class Solution { public int maxSubArray(int[] nums) { int n = nums.length; int subS ...
