当前位置: 首页 > news >正文

实验1-工厂方法和抽象工厂模式

一、实验目的

1、学习StarUML软件,掌握类图绘制方法。

2、利用java实现工厂方法、抽象工厂模式。

二、实验内容

1.工厂方法模式设计与实现:Haier生产HaierAirCondition, Midea生产MideaAirCondition。

(1)类图

(2)代码

(3)实验结果

2抽象工厂模式设计与实现:电脑配件生产工厂生产内存、CPU等硬件设备。

(1)类图

(2)代码

(3)实验结果

三、思考题

1.工厂方法模式与抽象工厂模式各自的特征是什么?区别是什么?

工厂方法模式特征:

(1)核心思想:工厂父类负责定义创建产品对象的公共接口,工厂子类负责生成具体的产品对象,将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

(2)模式结构:抽象产品(Product)、具体产品(ConcreteProduct)、抽象工厂(Factory)、具体工厂(ConcreteFactory)。

(3)优点:核心工厂类负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这允许系统在不修改工厂角色的情况下引进新产品;添加新的产品对象时,仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,符合“开闭原则”。

(4)缺点:考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用抽象层进行定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。

抽象工厂模式特征:

(1)核心思想:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

(2)模式结构:抽象产品(AbstractProduct)、具体产品(ConcreteProduct)、抽象工厂(AbstractFactory)、具体工厂(ConcreteFactory)。

(3)优点:隔离具体类的生成,因而更换一个具体工厂相对容易。所有的具体工厂都实现抽象工厂中定义的所有公共接口;客户端始终只使用同一个产品族中的对象,是非常实用的设计模式;增加新的具体工厂和产品族很方便,无须修改已有系统。

(4)缺点:添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品;开闭原侧的倾斜性(增加工厂和产品族容易,增加产品等级结构麻烦)。

区别:

工厂方法是“一个工厂只生产一种产品”,由子类决定具体产品类型。抽象工厂是“一个工厂可以生产多个产品”,生产一组相关的产品族。

2.工厂方法模式和抽象工厂模式各适用于什么类型的软件设计?

工厂方法模式适用场景:

(1)一个类不知道它所需要的对象的类:客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建;客户端需要知道创建具体产品的工厂类。

(2)一个类通过其子类来指定创建哪个对象:对抽象工厂类只需提供创建产品的接口,由其子类确定要创建的对象,利用多态性和里氏代换原则,程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。

(3)将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

抽象工厂模式适用场景:

(1)系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是重要的。

(2)系统中有多于一个的产品族,而每次只使用其中某一产品族。

(3)同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现。

(4)系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

http://www.dtcms.com/a/362654.html

相关文章:

  • C++编程语言:标准库:第37章——正则表达式(Bjarne Stroustrup)
  • 支付系统设计模式应用:从单例到观察者模式实践
  • 普通大学生的 Web3 实习怎么找?行业指南与实践技巧这里看
  • ArkUI核心功能组件使用(一)
  • ChatDOC工具测评:AI驱动PDF/Word文档处理,支持敏感内容隐私保护与表格提取分析
  • 一文吃透 deviceQuery:从安装到输出解读,彻底验证服务器 GPU 环境
  • Elasticsearch 核心知识与常见问题解析
  • 【学Python自动化】 7.1 Python 与 Rust 输入输出对比学习笔记
  • Dell 服务器更新Infiniband网卡固件操作
  • 大模型适配国产化服务器昇腾(300I DUO)
  • 信创服务器总死机原因及解决办法
  • 通过 FinalShell 访问服务器并运行 GUI 程序,提示 “Cannot connect to X server“ 的解决方法
  • 【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中
  • Babylon 编辑器快捷键小记
  • 临时邮箱地址获取服务器邮件工作流程与实现
  • Coze源码分析-工作空间-资源查询-后端源码
  • vue2滑块验证
  • 2025年IT行业女性职业发展证书选择指南
  • 从零开始在Ubuntu上快速部署Docker和Dify:结合 Dify + 蓝耘 MaaS平台打造 AI 应用实战指南
  • 网络准入控制,阻断违规外联-企业内网安全的第一道防线
  • 2025 随身 WIFI 行业报告:从拼参数到重体验,华为 / 格行 / 中兴技术差异化路径解析
  • 华为HCIE认证:三年有效期值不值得?
  • 腾讯会议的最佳替代者:Jitsi Meet 安装指南-支持onlyoffice集成
  • 第三方软件测试机构【多语言开发(PHP/Java/Python)WEB 应用的安全专业测试流程】
  • 【图像处理基石】图像预处理方面有哪些经典的算法?
  • Leetcode_206.反转链表(递归)
  • 学习日记-SpringMVC-day48-9.2
  • JS 秒转换成 MM:SS 格式
  • leetcode算法刷题的第二十四天
  • 破解数字化困局:五层双闭环治理模型详解