【附】在C++开发中体验设计模式
<上一节
下一节>
我一直推崇(admire)设计模式,但是我也不赞成滥用(abuse)设计模式。之于设计模式,我经常遇到的有两种误导(mislead):
既然我称之为误导(mislead),自然是有一些感想和思考的。之于前者,我的观点依旧是“道不远人”,设计模式就是面向对象分析和设计 OOA/D 中的“道”。设计模式的最终体现应该是一种思想,一种指导。而这种思想,这种指导,则正是我们在 OO 系统开发中所必需的。设计模式之所以会被人认为高深,很大的一个原因在于设计模式是一种设计层面上的技术(思想),而设计在目前很多的企业和公司经常被忽视或者轻视了。在我看来,设计模式中描述的各类模式,实在和面向对象的基本思想(封装、继承、多态)是如出一辙,只不过设计模式很多情况下会强调怎样通过 OO 中的多态、继承获得更大的工业级的复用、维护和扩展。原因也很简单,两者都是 OO 的一部分,不曾冲突,而是相得益彰。一个单纯的编码人员需不需要学习掌握设计模式?我们是否可以得享清净?在我看来,每个从事 OO 系统开发和设计的从业人员,都应该学习掌握设计模式,不过可能侧重点可能可以不一样:设计人员或更高抽象层次可以更多关注设计模式的使用场景和应用效益,而编码实现人员则需要更多关注设计模式的实现方法。设计模式的学习过程是一个非常痛苦并且不会短暂(至少我这样认为)的过程,但是这是必需的。而这个过程中获得最多的正是对于 OO 设计的一种潜移默化,这种潜移默化的效果则会直接体现在我们以后的面向对象系统的分析和设计中去。
之于后者,后者这种观点的存在是很有实际基础的。诚然,在我们身边,甚至是自己身上、自己正在经历的项目开发中,唯一的目标就是系统的运行(work)。我们会给开发的目标按照优先级派一个顺序:
然而,说总是让人觉得煞有介事,但是却让人觉得不着实际。之前曾用C++将GoF描述的 23 种设计模式写一遍,也对设计模式进行了研习和思考的探索,并在经历的一些项目和开发中使用了其中的一些具体的模式或者思想,因此准备将这些经历和经验也记录下来。再加上分析经典系统源码的经验,名字叫做《在开发中体验设计模式》,也算是给自己的一个任务和要求,我希望自己能够有足够的时间和精力来完成。
- 一种是将设计模式蒙上一层高深的神秘色彩,认为设计模式是一门非常高深的技术(或思想),在一般的开发和设计中无足轻重,也不会用到,可以置身事外、得享清净。
- 另外一种则对设计模式嗤之以鼻,认为设计模式不过如此,我们很多的设计和开发中根本就没有去考虑什么设计模式,系统已然 work,项目已然收工,不必用到,又何必劳神伤时、自讨苦吃。
既然我称之为误导(mislead),自然是有一些感想和思考的。之于前者,我的观点依旧是“道不远人”,设计模式就是面向对象分析和设计 OOA/D 中的“道”。设计模式的最终体现应该是一种思想,一种指导。而这种思想,这种指导,则正是我们在 OO 系统开发中所必需的。设计模式之所以会被人认为高深,很大的一个原因在于设计模式是一种设计层面上的技术(思想),而设计在目前很多的企业和公司经常被忽视或者轻视了。在我看来,设计模式中描述的各类模式,实在和面向对象的基本思想(封装、继承、多态)是如出一辙,只不过设计模式很多情况下会强调怎样通过 OO 中的多态、继承获得更大的工业级的复用、维护和扩展。原因也很简单,两者都是 OO 的一部分,不曾冲突,而是相得益彰。一个单纯的编码人员需不需要学习掌握设计模式?我们是否可以得享清净?在我看来,每个从事 OO 系统开发和设计的从业人员,都应该学习掌握设计模式,不过可能侧重点可能可以不一样:设计人员或更高抽象层次可以更多关注设计模式的使用场景和应用效益,而编码实现人员则需要更多关注设计模式的实现方法。设计模式的学习过程是一个非常痛苦并且不会短暂(至少我这样认为)的过程,但是这是必需的。而这个过程中获得最多的正是对于 OO 设计的一种潜移默化,这种潜移默化的效果则会直接体现在我们以后的面向对象系统的分析和设计中去。
之于后者,后者这种观点的存在是很有实际基础的。诚然,在我们身边,甚至是自己身上、自己正在经历的项目开发中,唯一的目标就是系统的运行(work)。我们会给开发的目标按照优先级派一个顺序:
- 可工作(work);
- 稳定(robust);
- 性能(performance);
- 扩展(expansibility);
- 复用(reuse)。
然而,说总是让人觉得煞有介事,但是却让人觉得不着实际。之前曾用C++将GoF描述的 23 种设计模式写一遍,也对设计模式进行了研习和思考的探索,并在经历的一些项目和开发中使用了其中的一些具体的模式或者思想,因此准备将这些经历和经验也记录下来。再加上分析经典系统源码的经验,名字叫做《在开发中体验设计模式》,也算是给自己的一个任务和要求,我希望自己能够有足够的时间和精力来完成。
<上一节
下一节>