一、设计模式参考目录
策略模式
观察者模式
装饰者模式
工厂模式
单例模式
命令模式
适配器模式
外观模式
模板方法模式
迭代器模式
组合模式
状态模式
JDK 动态代理
相关设计模式的所有代码,都传到了 GitHub,有需要的可以点击前往:
https://github.com/zchen96/design-pattern。
二、设计模式中的设计原则
- 找出应用中需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
- 针对接口编程,而不针对实现编程。
- 多用组合,少用继承。
- 为了交互对象之间的松耦合设计而努力。
- 类应该对扩展开放,对修改关闭。
- 要依赖抽象,不要依赖具体类。
- 减少对象之间的交互,减少类之间的耦合。
- 别来调用我们,我们会调用你。意思是底层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件。
- 一个类应该只有一个引起变化的原因。
不管我们能不能用到设计模式,在进行设计之前我们都应该考虑我们的设计是否能够满足上面的一些设计原则,这些设计原则往往决定着我们的代码是否具有弹性,否易扩展等。
三、自己的一些看法
3.1 为什么想要学习一些设计模式
自己学习 Java 也有一段时间了,一路摸爬滚打走来,始终保持着对编程的热爱。尽管学习了不少和 Java 相关的知识,但是对面向对象编程的理解始终保持在一个初学者的状态。不知道大家有没有和博主一样思考过或被别人问起过一些问题,比如:为什么要有接口,为什么要有抽象类,我们不使用接口和抽象类不是也可以完成具体的任务吗。在具体了解设计模式之前,我能知道的就是接口可以打破 Java 多重继承的局限,也曾上网查询过这些问题,但是始终理解不了其他的用途。
在学习了 Spring 一段时间后,想要查看 Spring 相关的底层源码。一打开某个类的继承结构,看到的都是相关的接口与抽象类,就很不理解。就这样,买了一本设计模式相关的书籍,在读了一段时间后,才理解到面向对象设计强大之处。其中有很多的设计原则都能使你重新打开面向对象设计世界的大门。
3.2 什么时候需要用到设计模式
这是一个很重要的问题,当你在进行设计的时候,如果可以确定你的设计中能够使用到某个设计模式时,那么就可以使用这个模式!如果在使用设计模式之前,有更简单的解决方案,那么我们可以在考虑使用设计模式之前先考虑这个简单的解决方案。
如何能够将一个设计模式适当的应用到设计中,这可能需要一些经验和知识。所以在初始阶段我们不应该为了使用模式而使用模式,只要我们的设计能够满足良好的设计原则,那也是很好的解决方案。还要就是,当需要代码重构的时候,可能就是使用模式的时间。
3.3 一些建议
首先我还是建议大家多了解一下有关设计模式方面的知识,如果有需要可以查看博主写的相关博文,博文并没有涉及到所有的设计模式,但是相信还是能够让大家对一些设计模式有一些理解。
如果你有时间,最好还是买一本和设计模式有关的书籍。其实在读《Head First 设计模式》时博主并没有花很多时间看书,而是把很多的时间花在了写博文上。因为书中以一种简单的方式带你了解设计模式,在这过程中不会让你感觉到枯燥,而且涉及代码很少,所以并不会花很多的时间。尽管在网上有很多介绍设计模式的博文,不管介绍的是否详细,都不可能把所有的相关细节都写出来。总之,为知识买单总是值得的。
最后,祝大家阅读愉快!