工厂模式是软件设计中最常用也最常见的一种模式,这里通过一个例子来说明其功能。

问题背景

用户需求:请提供 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举例(附源码)相关推荐

  1. java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署

    java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java校园爱心公益平台设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技 ...

  2. java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署

    java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 java幼儿早教系统软件设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署 本源码技 ...

  3. java计算机毕业设计ssm基于SSM框架的旅游订票系统s0s38(附源码、数据库)

    java计算机毕业设计ssm基于SSM框架的旅游订票系统s0s38(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...

  4. Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码

    Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...

  5. 航空机票APP的设计与实现【AS开发+SQLITE】【附源码】

    航空机票APP的设计与实现[附源码] 演示 学长带你飞之 航空机票小app 1 背景及意义 在信息技术和网络技术不断发展的当前社会,航空公司赖以生存的根本是提升自己的服务,只有以客户为本,企业才能保证 ...

  6. java游戏界面制作_软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加...

    上次完成到游戏首页的制作,今天完成了游戏基础界面的制作以及事件的简单添加.由于功能尚未完全实现,因此游戏界面的菜单列表只是简单地添加了一下,其余菜单列表以及倒计时等在后续的制作中逐一完善. 1.首先在 ...

  7. 【毕业设计_课程设计】基于神经网络学习的在线纸币识别【源码+论文】

    文章目录 0 项目说明 1 项目说明 2 系统设计 2.1 设计要求 2.2 设计方案 3 效果展示 4 论文目录 5 项目工程 0 项目说明 基于神经网络学习的在线纸币识别 提示:适合用于课程设计或 ...

  8. 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)

    文章目录 0 项目说明 1 研究目的 2 研究方法 3 系统设计 3.1 前台模块 3.1.1 首页 3.1.2 个人中心 3.1.3 发布者中心 3.2 后台模块 3.2.1 首页 3.2.2 新闻 ...

  9. springboot项目文档源码_基于SpringBoot和Vue的企业级中后台项目(附源码)

    简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第3期)
  2. 【Demo 0121】纯资源DLL中提取资源
  3. Visual Studio 10将面世 微软走得太快?
  4. 在js在页面中添加百度统计代码
  5. go语言基础之导入包的常用方法
  6. [BootStrap学习随笔] 起步、布局容器和栅格式布局
  7. 通过bat文件一键配置电脑IP
  8. 谷歌地图、百度地图、搜搜地图之浅比较
  9. Slave_IO_Running: No 的解决
  10. 【NOI2008】 糖果雨
  11. 使用cookie实现一周内自动登录
  12. picker 监听确定和取消事件
  13. 唯品会财报:一面骄阳,一面寒霜
  14. 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码
  15. 广义线性模型(Generalized Linear Model)之二:Logistic回归
  16. 目标竞赛省队,寒假如何备考生物竞赛联赛?
  17. []==![]结果为true,探究 == 本质
  18. (转)手把手教你写专利申请书•如何申请专利
  19. 微信小程序实现录音及本地录音播放功能
  20. 【文件编码转换】将GBK编码项目转为UTF-8编码项目

热门文章

  1. JAVA调用 keras,在TensorFlow(Python, Java)环境下使用Keras模型
  2. python中用于生成数字序列的函数_Python中的生成器?
  3. char添加一个字符_LINUX字符设备驱动模型分析(起始篇)
  4. 设计师作品交流社区,让你的原创设计作品展示给世界
  5. java qq在线客服,Java获得腾讯QQ在线状态(.net webservice) | 学步园
  6. java 狗带风波_养狗风波作文
  7. wits数据格式_WITS标准
  8. 部署项目到Linux服务器步骤
  9. 一个低时延高吞吐的日志方案设计-2021年6月4日
  10. X86 register