java 工厂模式_软件设计工厂模式使用场景介绍及java举例(附源码)
工厂模式是软件设计中最常用也最常见的一种模式,这里通过一个例子来说明其功能。
问题背景
用户需求:请提供 1)、图形绘制功能,当前可绘制当前可绘制原型、方形、三角形。未来可能需要支持绘制菱形、梯形等形状。2)、图形可以提供一些其他的方法,比如绘制、染色、描边等
系统设计
依据上面的需求,我们很自然的会想到以下设计点:
- 定义接口类,该类定义了对用户提供的方法,比如绘制、染色、描边等。
- 接口实现类,依据不同的图形来实现接口。
上面两点设计,完全可以实现用户需求。 但它有一个劣势:用户需要记住每个图形的实现类。随着增加新图形,或者更改当前使用的图形时,用户都需要不断实例化新的类。
此时,我们可以通过工厂模式来降低用户使用接口的复杂度。 即,我们提供一个工厂类,用户只需要输入图形类型即可获取到该图形的实例。用户不再需要记忆每个图形对应的类名。
所以,工厂模式是为了降低用户使用接口复杂度而出现的一个钟设计模式。
编码实现
- 首先,定义个接口类
// 暴露给用户的接口类public interface IShape { void draw(); // 提供给用户的方法}
- 其次,实现一个工厂,该工厂提供图形实例给用户
// 暴露给用户的工厂类,用户提供图形类型,即可通过该类获取图形实例。public class ShapeFactory { // 返回值为接口定义 public IShape create(String id) { if (id == null) {// 类型异常检测 throw new IllegalArgumentException("id is null"); } if ("Circle".equals(id)) { return new Circle(); } if ("Rectangle".equals(id)) { return new Rectangle(); } if ("Triangle".equals(id)) { return new Triangle(); }// 类型异常检测 throw new IllegalArgumentException("Unknow id = "+id); }}
- 最后,实现工厂实体内容,即实现图形类。这里用圆形类举例,其它类不一一例句。
// 图形类,圆型类。用户通过工厂类可以获取该类的实例public class Circle implements IShape { @Override public void draw() { System.out.println("draw a Circle"); }}
如上,清晰明了的说明了工厂模式的作用,及实现方法。
如果对例子感兴趣,可以私信我。
java 工厂模式_软件设计工厂模式使用场景介绍及java举例(附源码)相关推荐
- java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java计算机毕业设计ssm基于SSM框架的旅游订票系统s0s38(附源码、数据库)
java计算机毕业设计ssm基于SSM框架的旅游订票系统s0s38(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...
- Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码
Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...
- 航空机票APP的设计与实现【AS开发+SQLITE】【附源码】
航空机票APP的设计与实现[附源码] 演示 学长带你飞之 航空机票小app 1 背景及意义 在信息技术和网络技术不断发展的当前社会,航空公司赖以生存的根本是提升自己的服务,只有以客户为本,企业才能保证 ...
- java游戏界面制作_软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加...
上次完成到游戏首页的制作,今天完成了游戏基础界面的制作以及事件的简单添加.由于功能尚未完全实现,因此游戏界面的菜单列表只是简单地添加了一下,其余菜单列表以及倒计时等在后续的制作中逐一完善. 1.首先在 ...
- 【毕业设计_课程设计】基于神经网络学习的在线纸币识别【源码+论文】
文章目录 0 项目说明 1 项目说明 2 系统设计 2.1 设计要求 2.2 设计方案 3 效果展示 4 论文目录 5 项目工程 0 项目说明 基于神经网络学习的在线纸币识别 提示:适合用于课程设计或 ...
- 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)
文章目录 0 项目说明 1 研究目的 2 研究方法 3 系统设计 3.1 前台模块 3.1.1 首页 3.1.2 个人中心 3.1.3 发布者中心 3.2 后台模块 3.2.1 首页 3.2.2 新闻 ...
- springboot项目文档源码_基于SpringBoot和Vue的企业级中后台项目(附源码)
简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱 ...
最新文章
- 力扣(LeetCode)刷题,简单题(第3期)
- 【Demo 0121】纯资源DLL中提取资源
- Visual Studio 10将面世 微软走得太快?
- 在js在页面中添加百度统计代码
- go语言基础之导入包的常用方法
- [BootStrap学习随笔] 起步、布局容器和栅格式布局
- 通过bat文件一键配置电脑IP
- 谷歌地图、百度地图、搜搜地图之浅比较
- Slave_IO_Running: No 的解决
- 【NOI2008】 糖果雨
- 使用cookie实现一周内自动登录
- picker 监听确定和取消事件
- 唯品会财报:一面骄阳,一面寒霜
- 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码
- 广义线性模型(Generalized Linear Model)之二:Logistic回归
- 目标竞赛省队,寒假如何备考生物竞赛联赛?
- []==![]结果为true,探究 == 本质
- (转)手把手教你写专利申请书•如何申请专利
- 微信小程序实现录音及本地录音播放功能
- 【文件编码转换】将GBK编码项目转为UTF-8编码项目
热门文章
- JAVA调用 keras,在TensorFlow(Python, Java)环境下使用Keras模型
- python中用于生成数字序列的函数_Python中的生成器?
- char添加一个字符_LINUX字符设备驱动模型分析(起始篇)
- 设计师作品交流社区,让你的原创设计作品展示给世界
- java qq在线客服,Java获得腾讯QQ在线状态(.net webservice) | 学步园
- java 狗带风波_养狗风波作文
- wits数据格式_WITS标准
- 部署项目到Linux服务器步骤
- 一个低时延高吞吐的日志方案设计-2021年6月4日
- X86 register