天天看点

设计模式举例-序言

很多程序员把撸代码和解决一些技术难题当作技术牛逼,往往忽略软件结构设计的重要性,而事实上,软件结构设计决定了软件的BUG率,开发和维护成本,以及软件的生命周期,设计不好的软件,很容易就进入了技术债高起的进退两难的沼泽地。越是逻辑复杂需求多变的软件,越是需要关注结构设计,而设计模式真是软件结构设计的核心思想,就和打仗的孙子兵法一样重要,但真正掌握并且灵活运用却是非常非常困难的事情。

网上有很多设计模式的讲解,但又一个相同的问题,就是没有在真实的使用场景去解释这些设计模式带来的好处。例如,解释工厂模式,会举例汽车和汽车配件的例子,其实这些例子是在实际的业务开发中不存在的,虽然解释了设计模式的概念,但没有真正的讲清楚设计模式的灵魂。设计模式是偏理论的东西,就和牛顿3大定律似的,我们知道了牛顿3大定律,知道了定律的发现和过程,并不代表我们能够去解物理题,解高难的物理题需要的是一种能力,而不是简简单单的知识,怎么样把知识转换为能力,才是我们学习设计模式的根本目的,否则只能说我们知道这些设计模式的知识。真正学会设计模式的最好办法就是去理解真正的应用场景,就和学习兵法,必须要去打仗实践一样,否则只能是纸上谈兵。

设计模式的目标

设计模式的目标就是最大可能的实现代码重用,降低代码的耦合度,大大降低软件的开发和维护成本,让软件的BUG率可控,稳定性大大提升。说白了,设计模式就是为了企业的利润,是为了软件生产效率。如果不能实现这些目标,即使表面上使用了设计模式,也只是为了设计而设计,变成了过度设计,人们运用兵法就是为了打胜仗,开发者运用设计模式就是为了生产效率。

设计模式的基础

能够灵活运用设计模式的基础:对业务全面深入的理解,优秀的抽象归纳能力,自学完善能力和全面的技术能力。

对业务的深入理解是做设计的前提条件,这是做设计的目标,如果不理解业务就和打仗不懂战场情况一样,我看过一些程序员运用设计模式,但使用的都有错位感,看不出这种设计今后带来的好处。很多设计模式都是研究怎么把变化逻辑和不变逻辑进行有效的剥离处理,例如策略模式,如果自己没有想清楚哪些业务逻辑今后会变化,怎么做设计呢?

抽象归纳能力是做软件设计的基本功,就和达尔文总结归纳出生物进化论一样,软件的类继承结构就是一个软件功能的抽象归纳进化,相同的软件功能流程被抽象到了父类,子类处理各自个性化的流程。生物界的分类也是多层结构,通过对共性和个性划分,生物的归类越来越具体化。

软件设计是一个持续完善的过程,很多思路不是一开始就想到的,是经过不断实践优化得到的,所以设计重构是软件设计自我升华的过程。

软件设计毕竟是需要通过技术手段实现的,对技术的掌握就是对敌我火力的掌握,哪些地方可以利用现有框架,哪些地方需要规避,哪些地方需要改善,这些都需要很强的技术能力。软件设计必须是要考虑技术的基本原理的,如高并发的处理,如果设计不考虑底层技术的支持,只能是空中楼阁,中看不中用。

设计模式的掌握是需要一个过程的,需要把OO设计的思想和设计模式融合起来,去看优秀的开源框架设计,去理解和思考这些设计,把这些设计应用到自己的软件当中,并且在不断实践中完善自己的设计,设计不是一朝一夕就可以灵活掌握的。我自己学习设计模式就是从阅读Tomcat和Eclipse源码开始的,去理解这些设计模式背后的好处和原因,然后再应用到自己的软件设计和开发当中。我们开发的大型DRP连锁管理软件和ERP软件都使用了大量的设计模式,下面的章节里面我也会使用这些软件的应用场景。

继续阅读