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

前言

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

之因此要学习Java模式,是由于面试的时候有时间回答的不是太完整,面试事后才想起来如何回答。因此,我说了: 只有总结才是王道,只有总结才能提升git

设计模式

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

建立型模式,共五种:github

  • 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新的车子。

示例代码:


 测试类:

注意事项

有人把工厂模式分为: 简单工厂模式 ,工厂方法模式,抽象工厂模式,因此多出一种模式,这里简单工厂模式比较简单,实际中用的的不多,只在很简单的状况下用,没啥好说的,听说这不是一个真正的设计模式。在这里我就不作讨论了。但愿 你们也不用纠结!

项目地址:

https://github.com/androidsta...

总结

学习一个知识点要知道是什么,为何,怎么办,要知其然。也要知其因此然!

阅读更多

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

来谈一下android中的MVVM

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

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

相信本身,没有作不到的,只有想不到的

在这里得到的不只仅是技术!

相关文章
相关标签/搜索