Java 最常见面试题:简单工厂和抽象工厂有什么区别?

简介: Java 最常见面试题:简单工厂和抽象工厂有什么区别?

简单工厂模式:

这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。

它由三种角色组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。

来用类图来清晰的表示下的它们之间的关系:
image.png
抽象工厂模式
先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。
image.png
图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBusinessCar也是一个产品族。

可以这么说,它和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。

而且使用抽象工厂模式还要满足一下条件:

系统中有多个产品族,而系统一次只可能消费其中一族产品

同属于同一个产品族的产品以其使用。

来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

相关文章
|
DataWorks 数据可视化 前端开发
《阿里云飞天大数据平台 DataWorks 前端技术解密:工作流调度可视化》(脱敏版本)
## ![image.png](https://intranetproxy.alipay.com/skylark/lark/0/2021/png/13481/1614773723538-e8d99a86-b04d-47bb-86ad-90cdb07ac657.png#height=220&id=QQWI7&margin=%5Bobject%20Object%5D&name=image.png&or
1209 0
|
3月前
|
人工智能 自然语言处理 机器人
2026年阿里云OpenClaw(原Moltbot)零门槛部署指南:三大方式+百炼API配置实操
2026年,OpenClaw(原Moltbot/Clawdbot)作为阿里云生态下的明星零代码RPA平台,凭借与大语言模型的深度集成能力,成为办公自动化、智能客服、多平台协同场景的首选工具。它无需编写复杂脚本,通过自然语言指令即可实现邮件管理、文档处理、网页操作等自动化任务,更能打造具备持久记忆、主动执行功能的定制化AI助理,像“7×24小时不下班的AI员工”一样持续创造价值。
760 6
|
4月前
|
弹性计算 安全 Linux
阿里云服务器镜像解析:公共、自定义、共享、云市场及社区镜像对比与选择参考
阿里云服务器ESC镜像包括公共、自定义、共享、云市场及社区五大类型,每种镜像具有不同的特性和适用场景。公共镜像安全稳定;自定义镜像量身定制,可快速部署;共享镜像可跨账号协作;云市场镜像一键部署,省时省心;社区镜像开放共享,满足个性化需求。选择镜像时,用户需考虑操作系统、初始配置、安全性、稳定性及成本。
|
测试技术 程序员 安全
带你读《软件测试(原书第2版)》之一:软件测试的背景
本书涵盖了软件测试的方方面面:软件测试如何适应软件开发过程,基本的和高级的软件测试技术,在常见的测试任务中运用测试技能,使用自动化提高测试的效率,测试工作的计划和文档化,有效地报告发现的问题,衡量测试工作的成效和产品的改进,测试和质量保证的区别,寻求软件测试员的工作。
|
4月前
|
人工智能 前端开发 API
X-应用创作:您专属的全栈工程师,根据需求直接生成可上线的应用
Dataphin在V5.5推出“X-应用创作”,利用大模型丰富的全栈开发能力,结合系统内部的数据服务API,面向多元应用场景,快速构建高效且美观的微应用。
192 4
|
5月前
|
数据采集 监控 安全
怎样能购买到静态IP?静态IP有什么用处和优点?
本文将详细探讨购买静态IP的多种方式,包括静态IP采集的方法和如何有效购买代理IP。我们将分析不同途径的优缺点,帮助读者选择最适合自己的静态IP解决方案,让网络活动更加稳定和安全。无论是个人用户还是企业需求,均能找到合适的参考。
|
1月前
|
人工智能 运维 测试技术
从部署到优化,AI开源知识库实用心得
先交代一下背景:我们团队是中小规模研发+运维混合团队,共12人,核心痛点有两个:一是内网部署的国产化龙芯服务器,很多工具适配性差,之前用的传统Wiki要么装不上,要么运行卡顿;二是研发、运维、测试三个部门的技术知识分散,比如运维的服务器部署文档、研发的接口规范、测试的用例说明,分别存在本地文档、GitLab、企业微信文件夹里,跨部门协作时找资料像“考古”,新人上手更是难上加难。
|
2月前
|
人工智能 安全 Linux
OpenClaw龙虾AI进阶图文教程:1分钟部署(阿里云/Win11/MacOS/Linux)百炼Coding Plan配置+7款必备Skill+避坑FAQ
“好不容易部署好OpenClaw,却在1000+ Skills中挑花眼?”——这是2026年每一位“小龙虾养殖户”(OpenClaw用户昵称)的共同困扰。作为GitHub星标突破27万的开源AI智能体,OpenClaw的核心魅力在于通过Skills(技能插件)实现“能说会做”,但海量技能中混杂着大量Demo级工具、无人维护的废弃插件,甚至权限过大的安全隐患。
719 3
|
3月前
|
存储 机器学习/深度学习 人工智能
大模型应用:通俗理解大模型量化:从概念到实践的原理流程完整拆解.38
大模型量化是通过降低参数精度(如FP32→INT8),在几乎不损精度的前提下,显著压缩模型体积、提升推理速度、降低硬件门槛与功耗的关键技术,使大模型得以落地手机、PC等端侧设备。
603 16
|
4月前
|
SQL 关系型数据库 数据库
阿里云RDS数据库介绍:产品功能、实例规格、收费标准餐参考
阿里云RDS是企业级云端数据库服务,支持MySQL、SQL Server、PostgreSQL等主流引擎,以高可用性、弹性扩展、安全防护及智能化管理为核心优势。提供倚天版、Serverless实例等规格,适配高性能计算与负载波动场景。功能涵盖全密态加密、自动扩缩容、集群高可用架构及自治运维服务。计费模式灵活,包括包年包月、按量付费、Serverless等,结合优惠活动降低企业成本。