第4章 关于设计模式的那些事儿
4.1 本书与GoF的《设计模式》的关系
《设计模式》这本书最大的功能是目录,该目录列举并描述了23种设计模式。近年来,这一清单又增加了一些类别,最重要的是使涵盖范围扩展到更具体的问题类型。例如,Mark Grand 在Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML(以下简称《模式 Java版》)一书中增加了解决涉及诸如并发等问题的模式,而由Deepak Alur、John Crupi 和 Dan Malks合著的Core J2EE Patterns: Best Practices and Design Strategies一书中主要关注使用Java 2企业技术的多层应用程序上的模式。
很多人并没有注意到这点,学完Java基础语言就直接学习J2EE,有的甚至赶鸭子上架,直接使用Weblogic等具体J2EE软件,一段时间后,发现J2EE也不过如此,挺简单好用,但是你真正理解J2EE了吗?你在具体案例中的应用是否也在延伸J2EE的思想?对软件设计模式的研究造就了一本可能是面向对象设计方面最有影响的书籍——《设计模式》。
由此可见,设计模式和J2EE在思想上和动机上是一脉相承的,笔者总结了以下几个原因。
(1)设计模式更抽象。J2EE是具体的产品代码,可以接触得到,而设计模式在针对每个应用时才产生具体代码。
(2)设计模式是比J2EE等框架软件更小的体系结构,J2EE中许多具体程序都是应用设计模式来完成的,当你深入J2EE的内部代码研究时,这点尤其明显。因此,如果不具备设计模式的基础知识(GoF的《设计模式》),则很难快速地理解J2EE。不能理解J2EE,又如何能灵活应用?
(3)J2EE只是适合企业计算应用的框架软件,但是GoF的《设计模式》几乎可以用于任何应用!因此,GoF的《设计模式》应该是J2EE的重要理论基础之一。
所以说,GoF的《设计模式》是Java基础知识和J2EE框架知识之间一座隐性的“桥”。
设计模式其实也是一门艺术。设计模式源于生活,不要为了套用设计模式而使用设计模式。设计模式是在我们遇到问题没有头绪时提供的一种解决问题的方案,或者说用好设计模式可以防患于未然。自古以来,当人生迷茫时,我们往往都会寻求帮助,或上门咨询,或查阅资料。在几千年前,孔子就教给我们怎样做人。中国人都知道,从初生襁褓、十有五而志于学,到二十弱冠、三十而立、四十而不惑,再到五十而知天命、六十而耳顺,七十而从心所欲,不逾矩……我们的人生也在套用模板,当然,有些人不会选择这套模板。
《设计模式》总结的是经验之谈,千万不要死记硬背,生搬硬套。下面来总体预览一下设计模式的分类和总结,如下表所示。