Java 设计模式西游篇 - 第二回:工厂模式开宝店 八戒误入创建坑 📅 发布时间:2026/7/5 2:27:23 👁️ 浏览次数: 诗曰对象创建花样多直接 new 出祸端。 工厂模式来相助解耦创建保平安。 故事师徒四人来到对象创建国只见城门上写着法宝制造中心。八戒一看乐了“猴哥你看这满街的法宝店老猪我去弄几件趁手的兵器”悟空急忙拦住“呆子莫要乱闯这国的规矩是——不能直接 new 对象得走工厂”八戒不解“为啥俺老猪有钱想买啥买啥”悟空笑道“你且看这国的门道…” 踩坑打怪耦合三魔的围剿第一魔硬编码之妖八戒不信邪冲进一家兵器铺直接 new 了一把九齿钉耙publicclassBajie{privateWeaponweaponnewNineProngedRake();// 直接 newpublicvoidfight(){weapon.attack();}}谁知刚出门就遇到硬编码之妖此妖使出一招需求变更八戒顿时傻眼妖怪吼道“八戒国王有令你现在要用禅杖不用钉耙了”八戒慌了“这…这可咋办”悟空分析“呆子你的武器是硬编码 new 出来的要换武器就得改代码、重新编译”八戒哭道“猴哥救命”第二魔依赖纠缠怪悟空帮八戒改了代码继续前行。谁知又遇依赖纠缠怪publicclassTangSeng{privateWhiteHorsehorsenewWhiteHorse();privateBuddhistRobesrobesnewBuddhistRobes();privateBuddhistHathatnewBuddhistHat();// 以后每加一个依赖就要改这里...publicvoidtravel(){horse.ride();robes.wear();hat.putOn();}}妖怪使招“依赖倒置”唐僧被各种依赖缠住动弹不得悟空分析“师父你这类依赖了太多具体类哪天要换个马就得改你的代码应该依赖抽象而不是具体实现”第三魔扩展封闭兽好不容易脱身又遇扩展封闭兽publicclassWeaponFactory{publicstaticWeaponcreateWeapon(Stringtype){switch(type){casegolden_cudgel:returnnewGoldenCudgel();casenine_pronged_rake:returnnewNineProngedRake();casemonk_staff:returnnewMonkStaff();// 每加一个新武器就要改这里default:thrownewIllegalArgumentException(未知武器);}}}妖怪吼道“新增武器类型”悟空正要加新武器却发现要改工厂代码悟空皱眉“这违反了’开闭原则’应该对扩展开放对修改封闭”⚔️ 工厂模式大法第一式简单工厂一个工厂管所有publicclassWeaponFactory{publicstaticWeaponcreateWeapon(Stringtype){switch(type){casegolden_cudgel:returnnewGoldenCudgel();casenine_pronged_rake:returnnewNineProngedRake();casemonk_staff:returnnewMonkStaff();default:thrownewIllegalArgumentException(未知武器);}}}// 使用WeaponweaponWeaponFactory.createWeapon(golden_cudgel);优点简单客户端不用管创建细节缺点违反开闭原则加新产品要改工厂八戒评价“这还行老猪我只要说’给我个钉耙’工厂就给俺造”第二式工厂方法每个产品一个工厂// 抽象工厂publicinterfaceWeaponFactory{WeaponcreateWeapon();}// 悟空的工厂publicclassWukongWeaponFactoryimplementsWeaponFactory{OverridepublicWeaponcreateWeapon(){returnnewGoldenCudgel();}}// 八戒的工厂publicclassBajieWeaponFactoryimplementsWeaponFactory{OverridepublicWeaponcreateWeapon(){returnnewNineProngedRake();}}// 沙僧的工厂publicclassShaSengWeaponFactoryimplementsWeaponFactory{OverridepublicWeaponcreateWeapon(){returnnewMonkStaff();}}// 使用WeaponFactoryfactorynewWukongWeaponFactory();Weaponweaponfactory.createWeapon();优点符合开闭原则加新产品不用改现有代码缺点每加一个产品就要加一个工厂类悟空点评“这招高明哪天如来佛祖要加个新武器只需新建一个工厂不用动现有的”第三式抽象工厂产品族// 抽象工厂接口publicinterfaceEquipmentFactory{WeaponcreateWeapon();ArmorcreateArmor();MountcreateMount();}// 悟空装备工厂publicclassWukongEquipmentFactoryimplementsEquipmentFactory{OverridepublicWeaponcreateWeapon(){returnnewGoldenCudgel();}OverridepublicArmorcreateArmor(){returnnewPhoenixFeatherCap();}OverridepublicMountcreateMount(){returnnewSomersaultCloud();}}// 八戒装备工厂publicclassBajieEquipmentFactoryimplementsEquipmentFactory{OverridepublicWeaponcreateWeapon(){returnnewNineProngedRake();}OverridepublicArmorcreateArmor(){returnnewIronChainArmor();}OverridepublicMountcreateMount(){returnnewBlackCloud();}}// 使用EquipmentFactoryfactorynewWukongEquipmentFactory();Weaponweaponfactory.createWeapon();Armorarmorfactory.createArmor();Mountmountfactory.createMount();优点可以创建一整套配套的产品缺点加新产品类型要改所有工厂沙僧总结“大师兄的工厂产出’悟空套装’二师兄的工厂产出’八戒套装’各成一系” 战斗总结妖怪攻击方式破解招式硬编码之妖需求变更工厂封装创建逻辑依赖纠缠怪依赖具体类依赖抽象工厂接口扩展封闭兽新增产品类型工厂方法模式本章要点模式类型特点适用场景简单工厂一个工厂管所有产品少逻辑简单工厂方法每个产品一个工厂产品多需要扩展抽象工厂创建产品族需要配套的产品组合八戒的教训八戒不信邪偷偷 new 了一个九齿钉耙结果// 编译报错构造函数是私有的NineProngedRakerakenewNineProngedRake();// ❌悟空笑道“呆子这国的法宝都受工厂管你绕过工厂当然不行”八戒嘟囔“知道了…以后要啥找工厂不自己 new 了…”下回预告话说师徒来到算法变换山遇到白骨精三次变化。每次变化悟空都要换一种打法。如何灵活应对欲知后事如何且听第三回分解
投毒运维工具、攻破金融内网:勒索攻击下,金融安全防线为何不堪一击? 当运维工具从“效率利器”沦为攻击者的“破门钥匙”,当核心数据库被加密、客户信息遭窃取,当赎金勒索与数据泄露双重威胁叠加,金融机构的安全防线正在经历前所未有的冲击。近年来,以RushQL、LockBit、Conti为代表的勒索家族&#… 2026/7/3 17:35:25
【前沿解析】2026年3月8日:AI硬件与自动化科研双重突破——千问AI眼镜与SciDER重塑智能未来 摘要:本文深度解析2026年3月8日AI领域的双重技术突破——阿里巴巴千问AI眼镜正式发售与SciDER全自动AI科研系统亮相。文章将从技术原理、架构设计、应用场景等多维度剖析这两项突破性技术,为开发者提供全面的技术参考与实践指南。同时,提供可运行的端侧AI推理代码示例,展示… 2026/7/3 17:35:23
Wireshark抓包实战:从入门到精通 Wireshark抓包实战解析技术文章大纲网络抓包基础概念网络协议分析的意义与应用场景抓包工具分类与Wireshark优势常见网络协议简介(TCP/IP、HTTP、DNS等)Wireshark环境配置各平台安装指南(Windows/macOS/Linux)抓包权限配置&#x… 2026/7/4 15:46:37
英文论文降AI工具哪个靠谱?Turnitin检测实测攻略 中文论文降AI工具一大把,但英文论文呢? 特别是投SCI或者在海外读硕博的同学,Turnitin已经全面集成了AI检测功能。不少人投稿被拒,理由就是"AI-generated content detected"。 英文降AI工具不多,靠谱的更少。… 2026/7/5 11:09:19
TensorFlow 2.x Seq2Seq 实战:5步构建字母排序模型,准确率超95% TensorFlow 2.x实战:5步构建高精度字母排序Seq2Seq模型字母排序任务看似简单,却完美展现了序列到序列(Seq2Seq)模型的核心能力。想象一下,当你输入"python"时,模型能自动输出按字母顺序排列的&qu… 2026/7/5 11:07:18
2026最新Hermes Agent实战指南:从零搭建自进化AI代理 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在尝试构建一个能自主学习和执行复杂任务的AI助手时,发现市面上的AI Agent要么功能单一,要么配置复杂&… 2026/7/5 11:07:18
Linux字符设备驱动开发实战:从零编写内核模块与用户空间通信 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在嵌入式、服务器、桌面乃至移动设备领域,Linux 内核驱动着海量的硬件。从一块简单的 GPIO 引脚到复杂的 PCIe 显卡&#… 2026/7/5 11:05:18
C#无边框窗口UI模板【现代风、可拖拽、自适应布局】 1. 为什么需要无边框窗口UI模板现代桌面应用越来越注重用户体验和界面美观度,传统的Windows窗体边框往往显得呆板且占用宝贵的屏幕空间。无边框设计不仅能最大化展示内容区域,还能让开发者完全掌控界面风格,实现真正的个性化UI。我在开发医疗… 2026/7/5 11:05:18
SpringBoot+AI高校防诈骗平台架构与实现 1. 项目背景与核心价值 高校防诈骗宣传平台是当前数字化校园建设的刚需。每年开学季,针对大学生的电信诈骗案件频发,传统宣传方式存在覆盖面窄、互动性差、信息更新滞后等问题。这个基于SpringBootAI的解决方案,通过智能问答形式实现724小时在… 2026/7/5 11:03:17
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36