自从接触设计模式以来,一般看到的评论是以推崇为多。不过比较欣慰的是,最近在看《编程人生》中,有两个人对设计模式比较不屑。
之所以欣慰,并不是因为凑个热闹看他们互相攻击,互相批评——而是因为出现了不同的观点,特别是两位非常有分量的人物的观点。在技术领域,众口一词是一件非常恐怖的事情;百花齐放百家争鸣才是我们乐于看到的。因为不同观点的出现,特别是大师级的不同观点,能够促进更多的人去独立的思考与探索
。
好了,回归主题。编程人生中,《编程人生》中至少有两个人谈到了设计模式。
jamie zawinski:著名的lisp黑客,Netscape浏览器和Mozilla浏览器的核心开发者。在谈到程序员要读的书时说:
“还
有一本书叫《设计模式》,人人追捧,奉为圭臬。不过,在我看来,这本书一派胡言,给人的感觉好像是编程只需要剪贴粘贴就能搞定。你不用全盘考虑要做的任
务,只要看看这本配方书,找个有几分相近的模式,直接套用就行了。那根本不是编程,那是在涂色书。不过,似乎很多人都对这本书着了魔。”
Brendan eich,JavaScript之父,Mozilla公司CTO,在提到为编程想做而没有做的事情时说:
“我并不是一个热衷于面向对象和设计模式的人。从来没有买过Gamma的书(《设计模式》)。网景公司有些人买,Jamie zawinski的人或者网景收购的公司来的那些冤家对头会买,他们把这本书当圣经一样显摆,真有点让人受不了,他们根本就不是最好的程序员。”
至于什么是设计模式,他有什么好处等等,不是我今天要说。我想举个例子,做个对比。我们都知道,设计模式源于建筑领域,建筑领域可能离我们太远,我今天想拿篮球运动做个对比。
篮
球运动员为了提高篮球水平,除了进行身体训练和投篮训练外,还会进行一些连贯动作的训练和一些战术配合训练。比如,像交叉步,急停跳投,转身过人,挡拆等
等。这些训练是从何而来?篮球运动刚刚诞生的时候肯定没有。而是运动员在篮球运动过程中,发现在某一种情况下(也就是防守队员和团队成员的位置),使用某
一中类似的连贯动作往往能够取到非常好的效果。所以就有悟性非常高的人把这种约束条件和要采取的动作都总结出来,让运动员在训练中反复的训练,以形成一种
条件反射,在出现合适的机会的时候,快速而有效的使用这些连贯动作。
我想这也是模式的起源。有一点不同的是,我们学习设计模式的过程,是一种思维训练的过程
。
其实,上面的这些分析对于武术也同样适用。武侠迷可能会记得金庸笔下纷繁复杂招式名称(其实也是模式)。不过,金庸倒也提到过更高的境界:“无招胜有招
”。印象当中张无忌学习太极拳和令狐冲学习独孤九剑有描述。他们在学成之后确实很厉害。难怪jamie zawinski和Brendan eich会有些反对模式,也许他们已经学到了无招胜有招的真谛。
难道我们要抛弃所有的模式?不过我认为它可能并不适合所有的人,它依赖于人的造诣,以及天赋,悟性。我们很多人要获得提高,进行一些模式训练,也许还是一条非常有效的途径。
乱七八糟说了这么多,最后总结一下:
- 对于初学者来说,模式是个好东西,学习一些模式是一条有效的提高途径。
- 不要过度使用设计模式,他会给你带来额外的复杂度。 在我的眼中,简单性才是一个技术方案的首要因素。你知不知道李小龙截拳道的核心是什么?抛开招式,直截了当的进行最有效的攻击和防守。
不要把它当成银弹或者圣杯。
- 当你有一定的积累后,你也可以尝试“无招胜有招”的境界。
分享到:
相关推荐
### 设计模式——基于C#的工程化实现及扩展 #### 概述 本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,...
设计模式——可复用的OO软件
通过阅读博客文章《设计模式——适配器模式》(链接:https://wjy320.iteye.com/blog/2042323),我们可以深入了解适配器模式的实现细节,包括具体的代码示例以及在实际项目中的应用案例。这个博客可能会讨论如何在...
读书笔记:设计模式学习示例《设计模式——可复用面向对象软件的基础》的读书笔记
设计模式 PPT 南京大学 13种模式精辟解析
首先,我们来看"Java设计模式——观察者模式的两种情况": 1. **主动通知**: 在这种情况下,被观察者对象在自身状态发生变化时,会主动调用`Observable`接口提供的`notifyObservers()`方法,将变化通知给所有注册的...
这个是http://blog.csdn.net/dawanganban/article/details/9884681博客中java设计模式的源代码。下载前请先看《设计模式——工厂模式在开发中的应用》一文。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
在iOS开发中,设计模式是实现高效、可维护和可扩展代码的关键元素。本文将重点关注“委托”(Delegate)设计模式,这是一种常见的模式,用于在对象之间建立通信和协调行为。通过实现委托,一个对象(委托者)可以...
在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...
简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了客户端代码与具体产品类之间的耦合度。在本实验中,我们将深入理解和应用C#语言实现简单工厂模式。 简单工厂模式的...
《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
690页完整的《设计模式:基于C#的工程化实现及扩展 》王翔著作 pdf版
该文件名为《分析模式——可复用的对象模型》,是一部探讨如何通过设计模式建立可复用对象模型的专业著作。书中内容针对程序开发人员,尤其是对在程序开发中应用设计模式及构建可复用对象模型有深厚兴趣的专业人士。...
读书笔记:《大话设计模式》—— 随书实践
C++设计模式——单例模式-附件资源