「设计模式详解」工厂模式:简单工厂模式原理、实现与优缺点分析 | 附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种)
一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...
随机推荐
- 一个基于 ASP.NET Core 实现的领域驱动设计落地战术框架
前言 今天大姚给大家分享一个基于 ASP.NET Core 实现的领域驱动设计落地战术框架:netcorepal-cloud-framework. 框架介绍 netcorepal-cloud-fram ...
- CAN304 W1
CAN304 W1 Definition The protection afforded to an automated information system in order to attain t ...
- python 获取mac地址
python 获取mac地址 方法一:使用socket库 使用了socket库中的ioctl函数和fcntl模块来获取MAC地址 import socket import fcntl import s ...
- linux系统自定义登录提示信息
centos7配置说明 这里对于centos7.x系统,可以直接编辑/etc/motd文件,增加定制的提示信息,并可以通过不同颜色展示. vim /etc/motd ^[[32m 设备IP地址: 10 ...
- ChatMoney让我重新找到创作灵感
本文由 ChatMoney团队出品 今天是 2024 年 6月 19 日,星期三,哈喽大家好,我是一名乡野自媒体创作者小麦,基本上每天都会在自媒体的海洋中创作.重复着创作.创新.写稿.改稿.学习.复盘 ...
- ATM1.0面条版test
[一]功能概要 [1]注册 [2]登陆 [3]取款 [4]存款 [5]查看流水 [6]查看银行信息(查看自己的卡号.余额) [7]初始化银行信息 [8]退出 [二]功能需求 [1]注册 (1)身份信息 ...
- Python 潮流周刊#107:无 GIL Python 被正式批准(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- [2025.5.11 鲜花/rain] 非适应性白日梦
[2025.5.11 鲜花/rain] 非适应性白日梦 感觉人类太可悲了,连一些动物最基本的本能反应都不被允许 猫的应激反应是被允许的,人类的就是不被允许的,甚至 应激这一词的定义,对大部分人来说,都 ...
- Web Platform Tests (WPT) 跨浏览器测试套件
项目标题与描述 Web Platform Tests (WPT) 是一个跨浏览器的测试套件,用于验证Web平台栈的兼容性.其目标是确保不同浏览器实现的一致性,帮助开发者构建跨浏览器兼容的Web应用. ...
- MongoDB入门实战教程(10)
前面我们学习了在MongoDB中如何使用索引来提高查询效率,本篇我们开始进入事务管理部分,首先我们来看看写操作事务. 1 writeConcern详解 通过前面的介绍,我们了解了如何搭建一个Mongo ...