在熟悉语言的语法之后,想要进一步提升,那就是学习设计模式了.在GoF写出设计模式一书开始,之后不断的有设计模式的书籍出版,但是但多数都是在那本书的基础上写的,更多的是对那本书的阐述解释,让刚入门的新手去学习了解运用设计模式.至少我看到的设计模式的大部分图书也没有超出那本书的范围.
我看过不少的讲设计模式的书,但是看过后那些设计模式我都忘记的差不多.我没办法记住每一个模式,我是觉得那些模式没有讲到更本质.那些总结出来的设计模式更像是公式了.当然设计模式里面也有提到模式的目的是提高系统的可扩展性.对修改关闭,对扩展开放.但是也只是那么一提.然后更多的内容是去讲已有的哪些模式了,以及怎么去应用模式.
那么软件系统设计的目标我们也差不多清楚,就是实现既有的需求,并且还能够满足未来可能的需求.这就要求系统在设计之初要考虑到可扩展性问题.并且由于是一个复杂的软件系统,对于不是本系统的设计人员,系统架构也应该能让其很容易被理解.这是对模式的一点要求.另外的一点要求,是在构建系统时候,由于目标系统的复杂性,构建时候没有很好的规划极容易导致系统的不稳定,不完善.因此在构建系统时候,需要模式来解决系统内部之间的各个关系的相互作用,使系统这个整体更加健壮.
好的系统设计一定是清晰界限明确的.系统要被划分为小的子系统,各子系统之间的关系必须稳定明确.在构建复杂系统时候,将整个系统划分为子系统与其关系是简化复杂构建问题的手段之一.子系统又可以划分更小的子系统与其关系,最终解决整个系统构建问题.那么好的系统设计,就归结到子系统与其之间的关系上了.各子系统必须是功能明确,各不交叉,运行稳定.子系统之间的关系也应该是稳定且清晰简单.任何违背以上几点系统设计的要求的系统,必定是有各种各样的缺陷,要么运行不稳定,或者是可扩展性差,亦或是不容易被别人理解.
除了系统层面的设计,更加接近代码的设计也应该和系统层面的设计是一样,永远都不要构建功能庞杂,关系不明确且古怪的对象及其关系.最重要的原则是保持简单,一次只做一件事情.这样才能保证稳定性及简单性.
现在从设计软件系统的角度再看设计模式,我们就很清楚了.重要的不是设计模式本身,而是系统设计的最终目的,它才推动了设计模式的发展与演化.我之前看到过一本《元素模式》一书.书中把设计模式都是分解了来看,分解到不能分解的时候会发现,所有的设计模式都可以用一句话总结:设计模式是由类型,对象,方法,数据及其之间的关系组成.
不弄清楚本原,是不会真正明白设计模式的.
网友评论