前言

最近一直在Java方向奋斗《终于,我还是下决心学Java后台了》,今天抽空开始学习Java的设计模式了 。计划有时间就去学习,你这么有时间,还不来一起上车吗?

之所以要学习Java模式,是因为面试的时候有时间回答的不是太完整,面试过后才想起来如何回答。所以,我说了: 只有总结才是王道,只有总结才能提高

设计模式

其实正规的来说Java其实是23中设计模式,不过网上也有说是24种或者是26中的!设计模式不过是前人对代码的一种封装。用专业的话来讲:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

创建型模式,共五种:

  • 1.工厂方法模式、
  • 2.抽象工厂模式、
  • 3.单例模式、
  • 4.建造者模式、
  • 5.原型模式。

结构型模式,共七种:

  • 6.适配器模式、
  • 7.装饰器模式、
  • 8.代理模式、
  • 9.外观模式、
  • 10.桥接模式、
  • 11.组合模式、
  • 12.享元模式。

行为型模式,共十一种:

  • 13.策略模式、
  • 14.模板方法模式、
  • 15.观察者模式、
  • 16.迭代子模式、
  • 17.责任链模式、
  • 18.命令模式、
  • 19.备忘录模式、
  • 20.状态模式、
  • 21.访问者模式、
  • 22.中介者模式、
  • 23.解释器模式。

今日重点:工厂方法模式

工厂模式是创建型模式之一,又称为静态工厂方法模式!

优点:
  • 1.良好的封装性,代码结构清晰。一个对象创建是有条件约束的,如一个调用者需要一个具体的产品对象,只要知道这个产品的类名(或约束字符串)就可以了,不用知道创建对象的艰辛过程,减少模块间的耦合。

  • 2.工厂方法模式的扩展性非常优秀。在增加产品类的情况下,只要适当地修改具体的工厂类或扩展一个工厂类,就可以完成“拥抱变化”。例如在我们的例子中,需要增加一个棕色人种,则只需要增加一个BrownHuman类,工厂类不用任何修改就可完成系统扩展。

  • 3.屏蔽产品类。这一特点非常重要,产品类的实现如何变化,调用者都不需要关心,它只需要关心产品的接口,只要接口保持不表,系统中的上层模块就不要发生变化,因为产品类的实例化工作是由工厂类负责,一个产品对象具体由哪一个产品生成是由工厂类决定的。在数据库开发中,大家应该能够深刻体会到工厂方法模式的好处:如果使用JDBC连接数据库,数据库从MySql切换到Oracle,需要改动地方就是切换一下驱动名称(前提条件是SQL语句是标准语句),其他的都不需要修改,这是工厂方法模式灵活性的一个直接案例。

  • 4.工厂方法模式是典型的解耦框架。高层模块值需要知道产品的抽象类,其他的实现类都不用关心,符合迪米特原则,我不需要的就不要去交流;也符合依赖倒转原则,只依赖产品类的抽象;当然也符合里氏替换原则,使用产品子类替换产品父类,没问题!

缺点:

每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

用途:

第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。

第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

典型例子: 车子继承vehicle(车)类,有小汽车卡,公交车bus等,车子工厂实现工厂接口,工厂接口有抽象方法vehicle produce vehicle(String type)方法,车子工厂中实现工厂方法vehicle produce vehicle(String Type),方法中根据需要new新的车子。

示例代码:

注意事项

有人把工厂模式分为: 简单工厂模式 ,工厂方法模式,抽象工厂模式,所以多出一种模式,这里简单工厂模式比较简单,实际中用的的很少,只在很简单的情况下用,没啥好说的,据说这不是一个真正的设计模式。在这里我就不做讨论了。希望 大家也不用纠结!

项目地址:

github.com/androidstar…

总结

学习一个知识点要知道**是什么,为什么,怎么办,**要知其然。也要知其所以然! ###

终于,我还是下决心学Java后台了

来谈一下android中的MVVM

金9银10的面试黄金季节,分享几个重要的面试题

身为程序员写一百万行代码的感觉

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!

练就Java24章真经—你所不知道的工厂方法相关推荐

  1. android factory,“工厂映像”(factory image)是什么?你所不知道的Android问题

    趋势网(微博|微信)讯: "工厂映像"(factory image)是什么?你所不知道的Android问题. 从多种选择中挑选自己喜欢的终端,从而使高度可定制成为可能,这便是And ...

  2. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT

    https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...

  3. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    转http://www.cnblogs.com/zhijianliutang/p/4100103.html 前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的 ...

  4. 你真的会玩SQL吗?你所不知道的 数据聚合

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 你所不知道的网站外链高级操作策略

    很多seo认为外链对于seo已经没有多大效果了,其实并不是这样的.外链对于seo的帮助还是很大的,但是前提是优质的外链.     由于现在几乎所有优质的网站都不允许其他网站在自己的网站发布外链,因此导 ...

  6. 那些你所不知道的arXiv使用技巧

    作者:Tom Hardy Date:2020-12-23 来源:那些你所不知道的arXiv使用技巧

  7. ai的弹窗点了都不响应_【评价集合】拼多多评价,你所不知道的点都在这里!...

    对于在拼多多开店的商家们来说,评价是消费者对于商品的好坏程度的一个评分,评价的高低不仅仅会影响到商品的销量,更会影响转化率以及权重!所以为了店铺商品的长远发展打算!各位商家在求取出评.好评的道路上不断 ...

  8. python 函数调用 不允许关键字参数_你所不知道的Python|函数参数的演进之路

    原标题:你所不知道的Python|函数参数的演进之路 函数参数处理机制是Python中一个非常重要的知识点,随着Python的演进,参数处理机制的灵活性和丰富性也在不断增加,使得我们不仅可以写出简化的 ...

  9. 你所不知道的日志异步落库

    https://www.cnblogs.com/scy251147/p/9193075.html 在互联网设计架构过程中,日志异步落库,俨然已经是高并发环节中不可缺少的一环.为什么说是高并发环节中不可 ...

最新文章

  1. 解决文字无法缩小的问题
  2. MVC+JSON 无限滚动翻页
  3. 谨慎用药!这些药千万不能混在一起吃
  4. 读取STM32单片机-ID操作
  5. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
  6. mysql 自动分表_Mysql Event 自动分表
  7. 【python】 调用selenium中 ChromeDriver不匹配的问题
  8. 深入理解JVM(6)——JVM性能调优实战
  9. 1.1 linux介绍
  10. 在IIS7运行ASP程序
  11. 金字塔固定资产管理软件_目前常用固定资产管理软件有哪些?
  12. php 0x80070005,FastCGI Error Number: 5 (0x80070005)解决方法
  13. Linux引导过程和GRUB引导器
  14. 计算机boot快捷键,求各种电脑进入boot 的方式,一般的电脑快捷键是什么?
  15. PTA 排序(快速排序,基数排序)
  16. NPOI下载Excel
  17. centos7 pe系统安装_centos7 系统安装u盘安装教程无法识别的usb设备管
  18. 使用面膜过敏现象原因
  19. web前端:视频背景(铺满整个网页)
  20. 绝对强劲的swf破解工具,swf加密者的噩梦swf reader

热门文章

  1. 如何准备、制作和演讲presentation,以及应该注意的问题
  2. 【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块
  3. HCIA(5)动态路由实验
  4. [渝粤教育] 中国地质大学 大学英语(5) 复习题
  5. python 长字符串 ,每行指定长度输出
  6. 某计算机视觉公众号干货文章集锦
  7. 构建虚拟主机(基于域名、端口、IP地址进行构建)
  8. 通过拖坠自动生成html页面,网页制造开端—html.ppt
  9. edge浏览器什么相当于ie的中低_Win10 Edge浏览器和IE浏览器哪个好用?
  10. Makfile详解-工作流程