设计模式学习路线图

 

1.    我眼中的计算机

前两天看到一句话,说是计算机科学不是科学,同计算机也没什么关系。前面一半我是一直赞同的,因为自从接触到Tanenbaum那篇关于计算机专业学习的十条定律后,就开始把计算机专业当成一个工程专业来对待,而不是像物理、化学一样的科学专业来研究;而后一部分,老实说开始还是有些不爽的,但是细想来,大学里面学到的东西除了公共基础课程外,一部分是关于数理逻辑的,另外一部分是关于电子电路的,剩下的则是计算机理论方面的,说计算机本身有些什么东西,那也是数学、物理等其他专业给的。而最近又知道很多算法在数学上是成立的,但是计算机却是无法实现的,或者即使实现,也别想在太阳系毁灭之前拿到结果,也就坦然接受了。

 

说到程序设计,我自以为是对现实事物和流程的一个模拟。因此对于现实事物的分析方法,同样可以用在程序设计之上。对现实事物的模拟产生的是抽象的数据结构,对于现实流程的模拟产生的则是或明或暗的程序流程。以下就是我对程序设计持有的观点:

Ø  当认知现实事物时,经常使用的工具是分类和归纳。做程序设计同样如此,不过分类和归纳是发生在程序设计之前,而程序设计则针对每种分类作出相应的处理。通常情况下,special case是不受欢迎的,也是违反认知规律的。

Ø  程序设计还应该做到封装可以预知的变化,而封装变化,大多意味着提供一个间接层,也就是交互接口。对于不可预知的变化,除了瞎猫碰到死耗子情形外,是功效有限的。

Ø  对于软件来讲,即插即用是一个相对遥远的目标,生成可复用的模块是一个现实的目标。

 

2.    设计模式学习方法

大多数人一谈到设计模式,首先想到的基本上就是GOF的那本《设计模式 可复用面向对象软件的基础》。不过这本书理论色彩比较浓厚,比较难于理解。我自己摸索出了一条比较平缓的学习设计模式的路线,相对来讲比较适合缺少经验的人。以下仅代表个人观点。

 

1 准备工作

       很多设计模式都或明或暗使用到了接口的概念,也就是定义一个基类用于声明相互操作的功能集合,然后使用继承类来根据不同情况给予不同的实现。这里需要首先理解两个概念,一个是继承,另一个是虚函数。特别是对虚函数的实现原理以及运行机制的了解。在这里推荐阅读《深度探索C++对象模型》,重点是第四章(Function语意学)和第五章(构造、析构、拷贝构造语意学)。

 

 

《深度探索C++对象模型》

作者:Stanley B. Lippman

 

当然,在阅读过程中,适当的编码练习是需要的。

 

2 初步进阶

       每个设计模式的学习难度各有不同,因此从比较容易理解的模式入手,小心仔细理解就成为了这时的重点。在这里推荐阅读《设计模式解析》,最好是能够通读所有章节。如果时间不充裕的话,则可以选择阅读AdapterBridgeStrategyObserver模式,重点查看这些模式是如何使用接口继承来封装变化。到目前为止,头脑里各个模式大体上还是相对孤立的。

 

 

《设计模式解析》

 作者:Alan Shalloway, James R. Trott

 

 

 

 

 

 

3 深入学习

       因为前面已经学习了一些比较容易理解的设计模式,此时学习的难度就需要增加。推荐的书是久负盛名的GOF的《设计模式 可复用面向对象软件的基础》。这本书的特点是理论色彩比较浓厚,理解起来需要比较多的时间。在这里需要建立一个概念,就是模式不是孤立存在的,在实际使用时,一个模式往往需要用到另外一个模式作为自己的子模块实现,或者需要同使用另外一个模式实现的同级模块进行交互。这时自己看到的应该是一个关系网。当然没有必要把整个关系网背下来,因为实际使用的时候,往往有多种选择,而且可能还需要对使用的模式进行裁剪,以适应需要解决的问题。

 

 

《设计模式 可复用面向对象软件的基础》

 作者:GOF

 

 

 

 

 

4 消化理解

       在学习完GOF的大作之后,需要结合一些设计模式的具体应用实例,以便加深理解。在这里推荐《STL源码剖析》、《COM本质论》和《建筑的永恒之道》。

 

 

 

 

STL源码剖析》

 作者: 侯捷

 在这本书中可以学习到Iterator模式的具体应用。

 

 

 

 

 

 

 

 COM本质论》

 作者:Don Box

 在这本书中可以学习到Proxy模式的具体应用。

 

 

 

 

 

 《建筑的永恒之道》

作者: (美)C.亚历山大

译者: 赵冰

这本书讲述了设计模式的由来。

 

 

 

当然还会有其他的书籍,讲述不同领域的设计模式在实际系统中的应用,则可以根据实际的需要找来阅读。

 

5)拓展视野

其实设计模式并不只是GOF所提到的23种,还有很多其他的模式。在这里推荐《面向模式的软件体系结构》,或许自己暂时还不能设计一个软件的整体架构,但这又有什么关系呢?一滴水照样可以折射太阳的光芒。

 

 

3.    需要注意的问题

学习任何东西都需要付出时间、精力和耐心,以下是几条忠告:

Ø  不要急于求成

Ø  设计模式更多的是一种方法论,而不是一种特定的技术

Ø  模式有它能解决的问题,也有不能解决的问题

Ø  阅读其他软件工程师的作品,看一看别人是如何使用模式的

Ø  不要认为自己会的足够多,这个世界是开放的世界,自己能够接触到的知识和技能,别人也可以接触到。要培养自己的洞察力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值