尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
设计模式 - 工厂方法模式
学习地址https://www.bilibili.com/video/BV1Kb411W75N?p356vd_source461545ff50a35eaeaa8218ecdc5f7152工厂模式概述工厂模式适合凡是出现了大量的产品需要创建并且具有共同的接口时可以通过工厂方法模式进行创建。工厂模式实现了创建者与调用者的分离即将创建对象的过程屏蔽隔离起来达到提高灵活性的目的核心本质实例化对象用工厂方法代替 new 操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。工厂模式的分类简单工厂模式用来生产同一等级结构中的任意产品。对于增加新的产品 需要修改已有代码工厂方法模式用来生产同一等级结构中的固定产品。支持增加任意产品。简单工厂和工厂方法可以理解为广义上的工厂方法抽象工厂模式用来生产不同产品族的全部产品。对于增加新的产品无能为力支持增加产品族在以下的三种模式中第一种简单工厂如果传入的字符串有误不能正确创建对象第三种静态工厂相对于第二种多个工厂不需要实例化工厂类所以大多数情况下我们会选用第三种——静态工厂方法模式。一、无工厂模式interfaceCar{voidrun();}classAudiimplementsCar{publicvoidrun(){System.out.println(奥迪在跑);}}classBYDimplementsCar{publicvoidrun(){System.out.println(比亚迪在跑);}}publicclassClient01{publicstaticvoidmain(String[]args){CaranewAudi();CarbnewBYD();a.run();b.run();}}二、简单工厂模式简单工厂模式从命名上就可以看出这个模式一定很简单。它存在的目的很简单定义一个用于创建对象的工厂类。调用者只要知道他要什么从哪里拿如何创建不需要知道。分工多出了一个专门生产 Car 的实现类对象的工厂类。把调用者与创建者分离。小结简单工厂模式也叫静态工厂模式就是工厂类一般是使用静态方法通过接收的参数的不同来返回不同的实例对象。缺点对于增加新产品不修改代码的话是无法扩展的。违反了开闭原则对扩展开放对修改封闭。interfaceCar{voidrun();}classAudiimplementsCar{publicvoidrun(){System.out.println(奥迪在跑);}}classBYDimplementsCar{publicvoidrun(){System.out.println(比亚迪在跑);}}//工厂类classCarFactory{//方式一publicstaticCargetCar(Stringtype){if(奥迪.equals(type)){returnnewAudi();}elseif(比亚迪.equals(type)){returnnewBYD();}else{returnnull;}}//方式二// public static Car getAudi() {// return new Audi();// }// public static Car getByd() {// return new BYD();// }}publicclassClient02{publicstaticvoidmain(String[]args){CaraCarFactory.getCar( 奥 迪 );a.run();CarbCarFactory.getCar(比亚迪);b.run();}}三、工厂方法模式为了避免简单工厂模式的缺点不完全满足 OCP对扩展开放对修改关闭。工厂方法模式和简单工厂模式最大的不同在于简单工厂模式只有一个对于一个项目或者一个独立的模块而言工厂类而工厂方法模式有一组实现了相同接口的工厂类。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。总结简单工厂模式与工厂方法模式真正的避免了代码的改动了没有。在简单工厂模式中新产品的加入要修改工厂角色中的判断语句而在工厂方法模式中要么将判断逻辑留在抽象工厂角色中要么在客户程序中将具体工厂角色写死就像上面的例子一样。而且产品对象创建条件的改变必然会引起工厂角色的修改。面对这种情况Java 的反射机制与配置文件的巧妙结合突破了限制——这在Spring 中完美的体现了出来。packagecom.atguigu.pattern.factory.method;interfaceCar{voidrun();}//两个实现类classAudiimplementsCar{publicvoidrun(){System.out.println(奥迪在跑);}}classBYDimplementsCar{publicvoidrun(){System.out.println(比亚迪在跑);}}//工厂接口interfaceFactory{CargetCar();}//两个工厂类classAudiFactoryimplementsFactory{publicAudigetCar(){returnnewAudi();}}classBydFactoryimplementsFactory{publicBYDgetCar(){returnnewBYD();}}publicclassClient{publicstaticvoidmain(String[]args){CaranewAudiFactory().getCar();//相当于new Audi()CarbnewBydFactory().getCar();//相当于new BYD()a.run();b.run();}}四、抽象工厂模式抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为给客户端提供一个接口可以创建多个产品族中的产品对象。而且使用抽象工厂模式还要满足一下条件1、系统中有多个产品族而系统一次只可能消费其中一族产品。2、同属于同一个产品族的产品以其使用。
RELATED

相关推荐

Python与GIS

Python与GIS

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/24 3:35:52
Oracle 10g 服务端/客户端安装

Oracle 10g 服务端/客户端安装

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/24 3:35:52
首字响应280ms+动态慢思考:M3.1-Flash-Preview编程模型实测

首字响应280ms+动态慢思考:M3.1-Flash-Preview编程模型实测

如果你最近逛过MCode的模型广场,应该已经注意到那个新上架的选项:MiniMax M3.1-Flash-Preview。名字很长,参数不多,但配置栏里写着两个数字——首字响应最低280ms、动态慢思考。我当时第一反应是这俩词怎么凑到一起的?…

📅 2026/10/24 3:35:52
MORE NEWS

更多资讯

📰

C# StringBuilder 详解:字符串拼接别只会用 `+`,从原理到实战一次讲透

一句话概括: string 适合保存和使用文本,StringBuilder 更适合反复修改、不断追加的大段文本。理解它们的区别,再掌握 Append、Insert、Remove、Replace、Length 和 Capacity,就能在可读性与性能之间做出更合适的选择。文章目录 为…

📰

L3开源静态评测|Facebook Memlab:浏览器内存泄漏工具源码尽调(证据可复现)

L3开源静态评测|Facebook Memlab:浏览器内存泄漏工具源码尽调(证据可复现) 专栏:MetaMeta特辑 L3开源独立评测系列 快照Commit:c3e15df92d469e78501f7f536e3bed77f51f759e 评测体系:Valhalla-S…

📰

【老计带你懂概率统计】03:条件概率与贝叶斯定理,从线索反推真相的神器

【老计带你懂概率统计】03:条件概率与贝叶斯定理,从线索反推真相的神器开头:一个能吓坏人的体检问题 先给你出一道题,这道题据说很多医生都会答错。 假设有一种病,在人群里的发病率是0.1%(一千人里有一个&a…

📰

Vue 3 页面性能排查与优化

Vue 3 页面性能排查与优化 一、业务场景 某业务系统使用 Vue 3 Spring Boot。上线新版本后,用户反馈订单列表页面加载缓慢,等待时间达到 6~8 秒,偶尔出现滚动和操作卡顿。 初步排查结果: 后端接口响应时间正常。数据库…

📰

不用复杂命令,Windows 快速跑通 OpenClaw 本地 AI

📌 说明 本文基于 OpenClaw 版本展开讲解,全程采用图形化、可视化的交互模式。整合包已内置全部运行依赖,即便是零基础的普通用户,也能轻松复现完整的部署流程。 ✨核心亮点: 全程可视化图形交互界面,自动补…

📰

Kiro 本身是亚马逊云科技于 2025 年 7 月推出的 AI 原生集成开发环境(Agentic IDE)

Kiro「鬼点子计划」由亚马逊云科技发起,是一场面向极客、企业开发者和脑洞大开者的创意编程活动。活动口号为“你的奇思妙想,Kiro来实现”,核心理念是“世界不需要又一个平庸的 CRUD 模板,但它永远为奇思妙想留一扇门”。活动不要…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬