热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三大工厂设计模式应用总结报告,工厂设计模式的优点

一.题目分析1.题目一:简单工厂模式的应用(1)题目要求:模拟女娲造人;传入参数M,返回一个Man对象,传入参数W,返回一个Woman对象;在此实现基础上,增加一个机器人类,传入参

一.题目分析
1.题目一:简单工厂模式的应用
(1)题目要求:模拟女娲造人;传入参数M,返回一个Man对象,传入参数W,返回一个Woman对象;在此实现基础上,增加一个机器人类,传入参数R,返回一个Robot对象;实现该题目要求,并且观察女娲的变化。
(2)题目应用知识点:运用简单工厂模式编程实现
2.题目二:工厂方法模式的应用
(1)题目要求:模拟不同工厂生产空调;海尔工厂生产海尔空调,美的工厂生产美的空调。
(2)题目应用知识点:运用工厂方法模式编程实现;绘制类图
3.题目三:抽象工厂模式的应用
(1)题目要求:模拟电脑硬件生产工厂生产配件;该题中生产RAM、CPU硬件设备,品牌有Mac、Pc;如下是“产品等级结构-产品族”的示意图。
(2)题目应用知识点:运用抽象工厂模式编程实现;绘制类图

二.类图设计
1.模拟女娲造人的UML类图(简单工厂模式)

2.模拟生产空调的UML类图(工厂方法模式)

3.模拟电脑配件生产工厂生产硬件配件类图(抽象方法模式)

三.程序实现
1.简单工厂模式应用
1.1接口

public interface IPerson { void printPerson();}

1.2接口实现类
1.2.1Woman类

class Woman implements IPerson{ @Override public void printPerson() { System.out.println("女娲造出一个女生!"); }}

1.2.2Man类

class Man implements IPerson{ @Override public void printPerson() { System.out.println("女娲造出一个男生!"); }}

1.2.3Robot类

class Robot implements IPerson{ @Override public void printPerson() { System.out.println("wldfn造出来一个机器人!!!"); }}

1.3工厂类

class PersonFactory { public static IPerson getInstance(String type){ IPerson person = null; if(type.equals("W")){ person = new Woman(); }else if(type.equals("M")){ person = new Man(); }else if(type.equals("R")){ person = new Robot(); } return person; }}

1.4测试类

public class Test { public void createPerson(IPerson person){ person.printPerson(); } public static void main(String[] args) { String persontype; System.out.println("选择输入W或M或R:"); Scanner sc = new Scanner(System.in); persOntype= sc.nextLine(); IPerson person = PersonFactory.getInstance(persontype); new Test().createPerson(person); }}

2.工厂方法模式应用
2.1接口
2.1.1空调接口

public interface AirCondition { void printAirCondition();}

2.1.2空调工厂接口

public interface AirConditionFactory { AirCondition createAirCondition();}

2.2接口实现类
2.2.1HaierAirCondition类

class HaierAirCondition implements AirCondition{ @Override public void printAirCondition() { System.out.println("生产一个海尔空调..."); }}

2.2.2MideaAirCondition类

class MideaAirCondition implements AirCondition{ @Override public void printAirCondition() { System.out.println("生产一个美的空调..."); }}

2.2.3HaierFactory类

class HaierFactory implements AirConditionFactory{ @Override public AirCondition createAirCondition() { return new HaierAirCondition(); }}

2.2.4MideaFactory类

class MideaFactory implements AirConditionFactory{ public AirCondition createAirCondition() { return new MideaAirCondition(); }}

2.3测试类

public class Test { public void createAirCondition(AirCondition type){ type.printAirCondition(); } public static void main(String[] args) { AirConditionFactory airCOnditionFactory= new HaierFactory(); new Test().createAirCondition(airConditionFactory.createAirCondition()); }}

3.抽象工厂模式应用
3.1接口
3.1.1CPU接口

public interface ICPU { void printCPU();}

3.1.2RAM接口

public interface IRAM { void printRAM();}

3.1.3生产工厂接口

public interface ProductionFactory { ICPU createCPU(); IRAM createRAM();}

3.2接口实现类
3.2.1MacCPU类

public class MacCPU implements ICPU { @Override public void printCPU() { System.out.println("This is a MacCPU!"); }}

3.2.2PcCPU类

public class PcCPU implements ICPU{ @Override public void printCPU() { System.out.println("This is a PcCPU!"); }}

3.2.3MacRAM类

public class MacRAM implements IRAM{ @Override public void printRAM() { System.out.println("This is a MacRAM!"); }}

3.2.4PcRAM类

public class PcRAM implements IRAM { @Override public void printRAM() { System.out.println("This is a PcRAM!"); }}

3.2.5MacProductionFactory类

public class MacProductionFactory implements ProductionFactory { @Override public ICPU createCPU() { return new MacCPU(); } @Override public IRAM createRAM() { return new MacRAM(); }}

3.2.6PcProductionFactory类

public class PcProductionFactory implements ProductionFactory { @Override public ICPU createCPU() { return new PcCPU(); } @Override public IRAM createRAM() { return new PcRAM(); }}

3.3测试类

public class Test { public void buyCPU(ICPU cpu){ cpu.printCPU(); } public void buyRAM(IRAM ram){ ram.printRAM(); } public static void main(String[] args) { Test test = new Test(); ProductionFactory productiOnFactory= new MacProductionFactory(); ICPU cpu = productionFactory.createCPU(); IRAM ram = productionFactory.createRAM(); test.buyCPU(cpu); test.buyRAM(ram); }}

四.调试、测试及运行结果
1.题目一:
1.1当传入参数是W:

1.2当传入参数是M:

1.3当传入参数是R:

2.题目二:
2.1传入的是Haier空调对象:

2.2传入的是Midea空调对象:

3.题目三:
3.1传入的是Mac对象:

3.2 传入的是Pc对象:

五.总结
1.简单工厂模式:
(1)添加具体产品时,需要修改工厂类,违反了OCP原则;
(2)若需要添加多个具体产品时,会多次修改工厂类代码,导致工厂类体代码量不断增长,不利于日后代码维护;
(3)代码思想易于理解,代码编写简单;
2.工厂方法模式:
(1)区别于简单工厂模式,将产品类的对象实例化操作不再交给工厂类实现,而是将其交给具体的产品工厂类实现.
(2)产品拓展很方便,只需要增加对应的产品类、产品工厂类即可,不违反OCP原则;
3.抽象工厂模式:
(1)是工厂方法模式的一次拓展,它把原先的工厂方法模式中只能有一个抽象产品不能添加产品族 的缺点克服了,抽象工厂模式不仅仅遵循了OCP原则,而且可以添加更多产品(抽象产品),具体工厂也不仅仅 可以生成单一产品,而是生成一组产品,抽象工厂也是声明一组产品,对应扩展更加灵活;
(2)拓展族系产品很麻烦,需要修改工厂类代码;


推荐阅读
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • Python 内存管理机制详解
    本文深入探讨了Python的内存管理机制,涵盖了垃圾回收、引用计数和内存池机制。通过具体示例和专业解释,帮助读者理解Python如何高效地管理和释放内存资源。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 在Kubernetes集群中部署Kuboard
    本文详细介绍了如何在Kubernetes(简称k8s)环境中部署Kuboard,包括必要的命令和步骤,帮助用户顺利完成安装。 ... [详细]
  • Windows环境下部署Kubernetes Dashboard指南
    本指南详细介绍了如何在Windows系统中部署Kubernetes Dashboard,包括下载最新配置文件、修改服务类型以支持NodePort访问、下载所需镜像并启动Dashboard服务等步骤。 ... [详细]
  • 本文深入探讨了Kubernetes中Pod的基础概念及其分类,旨在帮助读者更好地理解和利用这一核心组件。通过详细的解析,我们将了解Pod如何作为最小的部署单元在Kubernetes集群中工作。 ... [详细]
  • 获取年月日,之前的日期不能选择日历cCalendar.getInstance();获取系统的工具类【可以获取时间】DatePickerDialogdate ... [详细]
author-avatar
松原电信曹玉威_203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有