学习设计模式的捷径

(c) 2009 张恂 www.zhangxun.com

本文的最新版在《大道至简:实话》:http://www.zhangxun.com/entry.aspx?sname=GoFpatterns

理解、掌握设计模式真有那么难吗?我们这个世界存在着简单的科学真理,复杂的设计模式表象背后自然也存在简单的客观现实。学习和掌握设计模式有没有什么技巧、窍门和捷径呢?有。

1、比较法

我最喜欢用、极力向大家推荐的第一种科学学习方法是比较法。在 23 个 GoF 设计模式中,有不少模式存在着相似性,在使用时很容易混淆。通过认真细致的比较,我们不但可以发现一组彼此相似或相关的设计模式之间的真正差异点,而且还可以用一组、一批模式整体学习的方式取代(或弥补)逐个模式孤立学习记忆的方式,从而起到加深记忆、提高学习效率、促进准确运用的效果。

2、图形建模法

我最喜欢用、极力向大家推荐的第二种科学方法是图形建模法(用 UML 记忆、思考和分析设计模式)。学习设计模式切忌死记硬背。最好做到只要一听到某个设计模式的名称,就能迅速在自己的大脑中,投射或浮现出这个设计模式的 UML 标准静态图(如类图)和动态图(如序列图、通信图、状态图等等),这远比直接投射或浮现出一行行的高级程序设计语言源代码要艺术、敏捷和高效得多。

有经验的 OO 程序员知道,设计模式的抽象层次要比具体的 OO 编程语言高一层,用图形化的抽象建模语言来描述设计模式,最简单,也最形象。同一个设计模式,既可以用 Java、C#、VB.NET 实现,也可以用 Delphi、C++、Ruby 或 JavaScript. 等其他各类 OO 编程语言实现。所以,企图通过死记硬背程序源代码来记忆设计模式的方式,不但让我们很难看到(或分析、比较)设计模式的本质特征,而且也是非常低效和错误的。

3、比喻法

第三种最常用的设计模式学习方法是比喻法,或叫比拟法、类比法。我们常常可以把设计模式同现实世界中某一个或某一些为人所熟悉的形象比喻联系起来,以便领会和掌握它们的基本结构和特点,加深对模式的记忆和理解。事实上,很多设计模式的名称原本就是一种比喻或对现实世界的模拟,例如,抽象工厂、桥、职责链、中介、访问者等等。熟练地运用比喻法可以产生这样的效果,一听到某个设计模式的名称,脑子里就能马上联想到它的比喻,进而浮现出它的结构图(UML 图形)。

Software is virtual reality(张恂)。比喻法之所以简单而有效,根本原因是因为软件设计活动本质上就是一种建模活动,而且由于我们是人类,我们总是会自觉不自觉地在软件程序中模拟、效仿现实世界中自己所熟悉的各种物质、概念及其运动规律。

通过打比方、比喻、类比,乃至用说俏皮话、调侃和无厘头的方式来学习设计模式,可能是一种不错的学习方式,能够寓教于乐,收到奇效。然而,运用比喻法需要注意的一个问题是:不要滥用比喻。为某个设计模式找到一个非常贴切、形象的比喻并非一件易事。现有很多设计模式比喻的问题是不像,没有抓住模式的基本特征(我也不一定能做得更好)。此外在拿设计模式与现实世界、人类社会作类比的时候,最好也不要扯得太远,以简明为宜。

4、重视 OOD 原则和方法

第四,我认为最重要的也是被许多人所忽视的一个学习要领是:

通用的原则与方法高于具体的模式和做法(General Principles and Methods over Concrete Patterns and Practices)

有没有什么东西比设计模式更重要?有!满脑子只有设计模式是不对的,其实这个世界上比设计模式更重要、更高级的事物还有很多,比方,设计原则和方法,尤其是 OOD 原则和方法,抽象、普适的原则和方法比具体、个别的模式、做法和解法更重要,其实所有的设计模式都是根据某种或某些软件设计的基本思想、原则和方法而创造出来的。

相关文章:

实话设计模式:GOF《设计模式》不宜作为初学者入门读物

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13633641/viewspace-563314/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13633641/viewspace-563314/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值