
创建型模式之简单工厂模式实例及代码操作
抽象产品类(Product):定义所有具体产品类的公共接口,确保不同产品类之间具有良好的兼容性。 具体产品类(ConcreteProduct):对应于抽象产品类的具体实现,代表实际可以创建的产品实例。 工厂类(Factory):负责根据输入参数创建对应的具体产品实例,实现产品的动态创建逻辑。
发布日期:2021-05-12 20:18:05
浏览次数:8
分类:精选文章
本文共 2052 字,大约阅读时间需要 6 分钟。
简单工厂模式(静态工厂方法模式)是一种常用的设计模式,其核心思想是通过工厂类来统一管理创建不同具体产品的逻辑。这种模式在软件开发中广泛应用,特别是在需要动态创建多种对象类型但不希望暴露对象创建细节的场景下。
传统解决方法的缺陷
传统的解决方法通常涉及直接使用new关键字来创建具体的产品类(如MachineGun或Pistol),这种方法存在以下问题:
- 可维护性差:随着产品种类的增加,代码变得难以管理和维护。
- 灵活性不足:当需要新增一种武器类型时,必须修改多处代码,导致开发效率低下。
- 反向兼容性问题:一旦某个具体产品类被修改,所有依赖该类的模块都需要重新编译或测试。
简单工厂模式的概念
简单工厂模式通过引入一个工厂类来统一管理不同产品类的创建过程。工厂类通常提供一个静态方法(如creatWeapon),接受一个参数来指定需要创建的具体产品类型,进而返回对应的产品对象。这种方式的核心优势在于:
- 代码集中管理:所有与产品创建相关的逻辑集中在工厂类中,避免了代码重复。
- 易于扩展:新增一种武器类型只需在工厂类中添加相应的判断逻辑即可,无需修改现有代码。
- 降低依赖风险:客户端代码只需调用工厂类的方法,无需直接依赖具体的产品类实现。
简单工厂模式的结构
简单工厂模式的结构通常包括三部分:
简单工厂模式的优点
相比传统方法,简单工厂模式具有以下优点:
- 代码简洁:减少了大量重复的new操作,代码更加简洁易读。
- 易于维护:新增产品类型时,只需在工厂类中添加相应的逻辑,而无需修改其他部分。
- 提高效率:通过集中管理创建逻辑,减少了调试和维护的难度。
- 支持动态创建:可以根据不同的参数动态创建不同的对象类型。
简单工厂模式的应用场景
简单工厂模式广泛应用于以下场景:
- 多种产品类型:需要创建多种不同类型的对象,但不希望暴露对象的创建细节。
- 动态创建对象:需要根据不同的参数或条件动态生成对象实例。
- 集中管理逻辑:需要统一管理多个不同类别的对象创建过程。
优化代码实现
以下是简单工厂模式的优化代码实现:
// 抽象产品类abstract class Weapon { abstract void display(); // 显示兵器名称}// 具体产品类class MachineGun extends Weapon { @Override void display() { System.out.println("机光枪"); }}class Pistol extends Weapon { @Override void display() { System.out.println("手枪"); }}// 工厂类class WeaponFactory { public static Weapon creatWeapon(String type) { Weapon w = null; switch (type) { case "手枪": w = new Pistol(); break; case "机关枪": w = new MachineGun(); break; default: System.out.println("不能生产该兵器" + type); } return w; }}// 客户端public class Demo { public static void main(String[] args) { Weapon pistol = WeaponFactory.creatWeapon("手枪"); pistol.display(); Weapon mg = WeaponFactory.creatWeapon("机关枪"); mg.display(); }}
优化后的运行效果
运行上述代码可以看到以下效果:
- 当传入"手枪"参数时,会创建并显示"手枪"实例。
- 当传入"机关枪"参数时,会创建并显示"机光枪"实例。
- 当传入其他参数时,会输出无法生产的提示信息。
这种设计方式通过工厂类的统一管理,实现了对武器创建逻辑的集中控制,显著提升了代码的可维护性和扩展性。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月05日 16时14分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Earth Engine下地表温度反演
2019-03-11
零基础入门Java该如何学习?
2019-03-11
XML数据如何进行解析呢,方式有哪些?
2019-03-11
在江城,“懂行”的华为大数据中心释放数字经济之美
2019-03-11
openEuler生态成长迅速,国产操作系统走出生态繁荣之路
2019-03-11
一体机新品亮相,XSKY软件定义存储的初心与梦想
2019-03-11
冷思考:数据中台的迷失与前行
2019-03-11
Ubuntu16.04安装谷歌浏览器
2019-03-11
如何在Debian 10上安装和保护Mosquitto MQTT消息代理
2019-03-11
如何设置Mosquitto MQTT服务器并从OwnTracks接收数据
2019-03-11
链上钱包的博彩雷区
2019-03-11
二线平台币涌入交易所公链
2019-03-11
CONMISANMA的正确答案——CSS实现左右居中
2019-03-11
Conmi的正确答案——index文件不在项目根目录下的解决方案
2019-03-11
字符串匹配算法集合
2019-03-11
在Linux上使用Qt编译WebKit
2019-03-11
短URL的开源库
2019-03-11
Linux下正则表达式匹配性能
2019-03-11
GRUB2
2019-03-11
VC中无LIB时的DLL隐式链接,制作与VC++相符合的LIB函数符号输入库
2019-03-11