概述
最近在看刘伟编著的《JAVA设计模式》,感觉还可以,之前没有系统性的学习过相关的内容。趁这次学习的机会,将学习过程中的笔记或者是心得分享给大家。如果有理解不对的地方,还望大家能够帮忙指正过来,在此不胜感激。
为什么要学习设计模式,我们应该可以从设计模式的定义里面找到答案:
设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。
Design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.
此定义中有几个关键字可能还需要理解下,比如特定环境是什么样的环境,软件设计问题又是指哪些设计问题呢?
特定环境我的理解是指使用每个设计模式的背景,比如说:我要处理不同来源的数据,有文件数据,有消息队列的数据,还有可能后续会增加其它类型的数据。在这样的背景下,我们就应该要选择工厂方法或者是抽象工厂方法模式来设计我们的数据处理的实现。又为什么要选择工厂方法或者是抽象工厂方法呢,这就是要解决我们的软件设计问题了,就是怎样能够让我们的软件具有可维护性和可复用性的特性。
可维护性【百度百科解释】:系统的可维护性是衡量一个系统的可修复(恢复)性和可改进性的难易程度。其中的可改进性则是系统具有接受对现有功能的改进,增加新功能的可能性。我的理解这里跟我们经常讲到的高内聚、低耦合是吻合的。增加新功能或者是修改,要尽量降低修改或者添加部分对原有系统的不好的影响。
可复用性【百度百科解释】:这个应该好理解,就是重复使用的意思。在最开始学习软件开发的时候,可能做得最多的是复制粘贴这样的操作。而这样的复用常常以破坏可维护性为代价。
设计原则
上面图中就是我们常见的7个设计原则,在最开始了解这些原则的时候。只是知道它们的存在,并不知道他们之间的关系,以及它们的具体应用。那它们之间有什么关系呢?按照我的理解,可以再将它们分为以下两类:
- 单一职责原则、接口隔离原则、合成复用原则、迪米特法则;
- 开闭原则、里氏代换原则、依赖倒转原则;
第一类主要是讲尽量将我们设计的类的职责权限(即所做的事情)范围限制在同一业务类型范围内。不要来大杂烩,什么行为方法都放在一起。第二类中的开闭原则是我们的目标,为了达到目标,我们有里氏代换原则、依赖倒转原则这两个工具。而这两个工具又是什么了些什么技术来完成他们的作用的呢? 面向接口编程就是答案,面向接口编程我们经常会听到这样的说法,不知道大家之前是否有这个这样的疑问:面向接口编程到底和哪些知识点有关,到底有哪些具体的好处,到底应用在什么地方? 希望大家看了这篇博文能够找到答案。