一、简单工厂模式

简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类

实现汽车接口

奔驰类

宝马类

简单工厂,既能生产宝马又能生产奔驰

测试类

测试结果

BMW

根据简单工厂的定义,用户只要产品而不在乎产品如何生产,看起来好像很完美的样子。但大家想想,这个世界存在什么都生产的工厂吗?

显然是不存在的,每一个汽车品牌都有自己的生产工厂,都有自己生产技术。映射到spring框架中,我们有很多很多种的bean需要生产,如果只依靠一个简单工厂来实现,那么我们得在工厂类中嵌套多少个if..else if啊?

而且我们在代码中生产一辆汽车只是new一下就出来了,但实际操作中却不知道需要进行多少操作,加载、注册等操作都将体现在工厂类中,那么这个类就会变得紊乱,管理起来也很不方便,所以说每个品牌应该有自己的生产类。

因为专一,所以专业嘛,这个时候工厂方法就出现了。

二、工厂方法

工厂接口

奔驰工厂

宝马工厂

测试类

测试结果

BMW

Benz

根据上述代码可以看出,不同品牌的汽车是由不同的工厂生产的,貌似又是很完美的。但大家看一下测试类,当一个人想要去买一辆宝马汽车的时候(假设没有销售商),那么他就要去找宝马工厂给他生产一辆,过几天又想要买一辆奔驰汽车的时候,又得跑到奔驰工厂请人生产,这无疑就增加了用户的操作复杂性。所以有没有一种方便用户操作的方法呢?这个时候抽象工厂模式就出现了。

三、抽象工厂

抽象工厂

默认工厂

宝马工厂

奔驰工厂

测试类

测试结果

Benz

根据上述代码可以看出,用户需要一辆汽车,只需要去找默认的工厂提出自己的需求(传入参数),便能得到自己想要产品,而不用根据产品去寻找不同的生产工厂,方便用户操作。

注:对于设计模式,有些人嗤之以鼻,有些人敬若神明,但我是认可的。

按我粗浅的理解,设计模式的经典之处,就在于解决了编写代码的人和调用代码的人双方的痛楚,不同的设计模式也只适用于不同的场景。至于用或者不用,如何使用,那就需要各位看官着重考虑了。

但为了使用而使用是不应该的,细微之处,只有留给大家慢慢品味了。

java中的工厂模式_深入理解Java的三种工厂模式相关推荐

  1. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  2. java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用

    我们知道Java中的对象一般存放在堆中,但是总不能让这些对象一直占着内存空间,这些对象最终都会被回收并释放内存,那么我们如何判断对象已经成为垃圾呢?这篇文章会提出两种算法解决这个问题.另外,本文还要谈 ...

  3. java spring boot 注解验证_如何理解Java原生注解和Spring 各种注解?

    作者:digdeep .cnblogs.com/digdeep/p/4525567.html 导引 Spring中的注解大概可以分为两大类: spring的bean容器相关的注解,或者说bean工厂相 ...

  4. 安卓蓝牙键盘切换输入法_采用国产机械轴,三种连接模式轻松切换,TT G521上手体验...

    之前我用过三模游戏鼠标,也用过三模薄膜键盘,但是三模机械键盘,还是第一次使用.机械键盘,相信大家都知道,现在已经很普及了,估计当时把机械键盘重新带回到玩家当中的大神,也没有想到它会这么火爆吧.至于什么 ...

  5. python编程模式是什么_python 开发的三种运行模式详细介绍

    Python 三种运行模式 Python作为一门脚本语言,使用的范围很广.有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程.不管怎么说,怎么使用python既取决于 ...

  6. java中的static类_再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  7. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  8. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  9. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  10. java如果不使用多态_深入理解java多态没有烤山药的存在,java就不香了吗?

    @ 我不想知道各位理解java多态没有烤山药的存在,java香不香的问题了,我不要你们认为,我只要我觉得 (感觉要被打....) 在博主认为多态绝对是面向对象的第三大特性中让很多小白同学以及初学者难以 ...

最新文章

  1. Google是如何做Code Review的?| CSDN原力计划
  2. “深度学习之父”后悔投少了?90后华人学者:我们只卖AI软件
  3. Shell-流程控制案例
  4. 【Node.js学习小案例】DNS域名解析 一
  5. 【机器学习】机器学习中必知必会的 8 种降维技术,最后一款超硬核!
  6. jQuery on 绑定的事件触发多次
  7. org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArra
  8. 使用Event Message 对 Package 进行Troubleshoot
  9. UEditor实战分享(二)定制
  10. oracle归档日志满正常么,oracle归档日志满了的处理方法
  11. JAVA 生成随机数两种方式
  12. 计算机学院军训口号大全团队,关于霸气押韵的军训口号大全
  13. 【饭谈】那些看似为公司着想,实际却很自私的故事 (一:造轮子)
  14. 手把手教你制作一目了然的可视化地图
  15. <img>标签中alt属性和title属性的区别
  16. Java NIO编程
  17. CCNA续集CCNP
  18. Myeclipse 手动安装Velocity插件
  19. 爱数备份卫士 v3.0 免费下载
  20. 基于java 工单管理_java毕业设计_springboot框架的工单管理

热门文章

  1. HarmonyOS之常用组件ProgressBar的功能和使用
  2. OpenGL之3D数学的向量和矩阵
  3. LeetCode Algorithm 590. N 叉树的后序遍历
  4. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法
  5. 编写你的第一个 Django 应用,第 6 部分
  6. Python数据类型判断常遇到的坑
  7. BASIC-5 查找整数
  8. ubuntu的Unity功能安装
  9. 【Linux】一步一步学Linux——cksum命令(235)
  10. 【Linux】一步一步学Linux——alias命令(205)