设计模式-见解

自从接触设计模式以来,一般看到的评论是以推崇为多。不过比较欣慰的是,最近在看《编程人生》中,有两个人对设计模式比较不屑。 
之所以欣慰,并不是因为凑个热闹看他们互相攻击,互相批评——而是因为出现了不同的观点,特别是两位非常有分量的人物的观点。在技术领域,众口一词是一件非常恐怖的事情;百花齐放百家争鸣才是我们乐于看到的。因为不同观点的出现,特别是大师级的不同观点,能够促进更多的人去独立的思考与探索


好了,回归主题。编程人生中,《编程人生》中至少有两个人谈到了设计模式。 
jamie zawinski:著名的lisp黑客,Netscape浏览器和Mozilla浏览器的核心开发者。在谈到程序员要读的书时说: 
“还有一本书叫《设计模式》,人人追捧,奉为圭臬。不过,在我看来,这本书一派胡言,给人的感觉好像是编程只需要剪贴粘贴就能搞定。你不用全盘考虑要做的任务,只要看看这本配方书,找个有几分相近的模式,直接套用就行了。那根本不是编程,那是在涂色书。不过,似乎很多人都对这本书着了魔。” 
Brendan eich,JavaScript之父,Mozilla公司CTO,在提到为编程想做而没有做的事情时说: 
“我并不是一个热衷于面向对象和设计模式的人。从来没有买过Gamma的书(《设计模式》)。网景公司有些人买,Jamie zawinski的人或者网景收购的公司来的那些冤家对头会买,他们把这本书当圣经一样显摆,真有点让人受不了,他们根本就不是最好的程序员。”

至于什么是设计模式,他有什么好处等等,不是我今天要说。我想举个例子,做个对比。我们都知道,设计模式源于建筑领域,建筑领域可能离我们太远,我今天想拿篮球运动做个对比。

篮球运动员为了提高篮球水平,除了进行身体训练和投篮训练外,还会进行一些连贯动作的训练和一些战术配合训练。比如,像交叉步,急停跳投,转身过人,挡拆等等。这些训练是从何而来?篮球运动刚刚诞生的时候肯定没有。而是运动员在篮球运动过程中,发现在某一种情况下(也就是防守队员和团队成员的位置),使用某一中类似的连贯动作往往能够取到非常好的效果。所以就有悟性非常高的人把这种约束条件和要采取的动作都总结出来,让运动员在训练中反复的训练,以形成一种条件反射,在出现合适的机会的时候,快速而有效的使用这些连贯动作。

我想这也是模式的起源。有一点不同的是,我们学习设计模式的过程,是一种思维训练的过程

其实,上面的这些分析对于武术也同样适用。武侠迷可能会记得金庸笔下纷繁复杂招式名称(其实也是模式)。不过,金庸倒也提到过更高的境界:“无招胜有招”。印象当中张无忌学习太极拳和令狐冲学习独孤九剑有描述。他们在学成之后确实很厉害。难怪jamie zawinski和Brendan eich会有些反对模式,也许他们已经学到了无招胜有招的真谛。

难道我们要抛弃所有的模式?不过我认为它可能并不适合所有的人,它依赖于人的造诣,以及天赋,悟性。我们很多人要获得提高,进行一些模式训练,也许还是一条非常有效的途径。

乱七八糟说了这么多,最后总结一下:

  1. 对于初学者来说,模式是个好东西,学习一些模式是一条有效的提高途径。
  2. 不要过度使用设计模式,他会给你带来额外的复杂度。 在我的眼中,简单性才是一个技术方案的首要因素。你知不知道李小龙截拳道的核心是什么?抛开招式,直截了当的进行最有效的攻击和防守。
  3. 不要把它当成银弹或者圣杯。
  4. 当你有一定的积累后,你也可以尝试“无招胜有招”的境界。

http://blog.csdn.net/chgaowei/archive/2011/06/15/6547286.aspx

 

 

其实模式只是一种特定环境下前人找到的特定解决方案,我们应该学习模式,因为我们还不是大师,但是我们不是为了学习模式才学习模式,

我们学习模式时更重要的是学习这些模式的思想,比如,模式的优点,缺点,为什么会这么设计,为了解决什么问题,要追根溯源。

 

以前看设计模式的书上来就把这个模式的UML图画出来,然后开始对这个图结合代码进行讲解,这样的书即使背下来了,你对每个模式的UML图都熟记于心了也只是个皮毛而已。

 

个人对于设计模式的感觉是:

 

1.先知道问题是什么,在自己去思考解决办法,再带着疑问去看别人的解决方案,问问自己,我的问题这个方案都解决了吗,都是最好的吗?

 

举个例子来说:很早前接触web开发时也听过分布式,也听过别人说要把服务器搞到月球上去,当时也不理解,既然不明白就去看看分布式等等的书,一看好像是明白了,可以按照书上的理论开始说些理论和概念了,也算是菜鸟了,也算有点得意,毕竟学到点不是所有人都知道的东西,但是也就停留在口头了,实践怎么做呢,我要怎么实践呢,我在什么地方用它呢,无从下手,还是不会,所以返回到开始,我把自己定位为根本不明白分布式的还没入门的人,开始思考,大概思考的过程如下:

 

我要做一个上百万用户并发的网站->网站要有很多资源->带宽,CSS,JS,代码,数据->可是我自己就一个台式机->我的带宽才2M,机器性能也不好啊->一百万人并发访问我的网站我这点资源怎么分啊->看来要多搞点机器啊->好,我现在有100台牛逼服务器了->可是现在我的这些资源怎么装在100台服务器上呢,每个机器都是可以单独可以服务的还是100台机器联合起来才能服务呢->数据怎么存储在100台机器上呢,如果还是存储在一个机器上还是一百万并发数据的读写,那就没意义了->看来资源和数据要分布在各个服务器上啊->这样的话我怎么知道那些数据应该存储到哪个机器上呢->存储到某台机器上的数据,下次怎么读取呢??

 

到这里才发现,分布式很玄乎啊,也许书里面讲的数据的垂直和水平切分是能解决这些问题的,带这疑问再去看....

 

2.学习设计模式其实是在学习资源的分配,管理,协调的方法

我们遇到的很多问题,都是在现实生活中可以找到影子的。

 

比如说代理模式,我们就可以理解为老板的秘书,大老板还有很多秘书呢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值