设计模式,说起设计模式,设计模式,总是给人留下一种高屋建瓴,金碧辉煌的感觉。甚至很多人以在一款软件里使用了多少设计模式来衡量软件代码的质量。所以设计模式对于我们这些软件开发人员来说,实在再熟悉不过了。自从一本由四人组合写的奇书横空出世以后,设计模式在软件开发中就火了起来,很多程序员甚至把那本书奉为圣经。虽然我们怎么熟悉它,那我们是否真的完全理解或者掌握了它的精髓了呢?


     无论学习什么知识我们首先从三问,或者五问问起(所有知识学习都逃不出这几问)。第一问,是什么?首先我们来看看这个设计模式到底是什么呢?设计模式,模式,首先我们顾名思义,它肯定是一种模式。所以我们在谈设计模式之前,我们先来看看什么是个模式。模式,这个概念对于我们来说也并不陌生。在我们的生活中,也到处都是。


网上的定义:模式是指从生产经验和生活经验中经过抽象和升华提炼出来的核心知识体系。模式(Pattern)其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。

维基百科的定义:模式(英语:Pattern,源自法语:patron),在物体或事件上,产生的一种规律变化与自我重复的样式与过程。


     模式就是一种人们在解决问题的过程中,对同一类型重复出现的问题的各种解决之法的总结归纳,最终抽象提炼出的一种为了今后能够更高效更好的去解决同类问题的方法理论。其实,模式,就是一种固定的能够比较好的解决问题的方法理论。再简单说,模式就是一种解决问题的方式,风格。比如,我们生活中的常提到的商业模式,企业运营模式,还有我们经常剖析的思维模式。说到思维模式,我们伟大的米老师的思维模式就最经典,是我们所有人都要学习的哈。我们经常画思维导图,我们画的每一张导图,其实就是我们一种思维模式的反应。我们经常说的思维定式就是一种特殊的思维模式。每当人们提到思维定式,总认为思维定式仅仅是一种思想的禁锢。其实不然,思维定式是一把双刃剑,对我们其实也有很大的好处,我们平时的生活是离不开思维定式的。比如:1+1=2?1+1不一定等于2!但是在我们的生活中多数情况下1+1就等于2,所以我们慢慢的就形成了1+1等于2的思维定式。并且这个思维定式帮了我们很大的忙,它是我们做复杂计算的基础。如果我们没有这个思维定式,那我们做计算时那就费劲多了,我们还得去想1+1真的等于2?什么时候才等于2呢?这样我们就太浪费时间,浪费生命了,想的太多了!而有了思维定式,我们就可以脱口而出,想都不用想。所以,思维定式并不是我们想象的那么万恶,其实它给我们带来的好处还是很多的,尤其是在提高效率上面。关于思维定式的具体论述,请见我的博客《学习触发器谈思维定式  》


     说到模式,生活中处处都是模式。比如文章有文章的模式。如新闻有新闻的模式,第一段总是话简述了整个新闻,诗歌总是抒情的,论文总是死板的,讲稿总是高谈的,漫画总是幽默的,……  新闻联播的模式是:头 10分钟领导很忙,中间 10 分钟人民很幸福,后 10 分钟国外很乱。中国政府官方宣传稿也模式也很明显,各种赞美,口号,胜利,总是要坚持个什么,团结个什么,迈向个什么,某某精神,某某思想,群众情绪稳定,不明真相,等等……

这就是 Pattern,只要你细心观察,你会发现这世间处处都是 Pattern。


     关于模式就说到这里,现在回到我们的设计模式。大家明白了模式,现在再来看设计模式,就很容易明白了。设计模式,只是加了2字“设计”而已。模式,是一种固定的能够比较好的解决问题的方法理论。所以设计模式,自然就是软件开发中一种固定的能够比较好的解决某一类问题的设计方法。设计模式的英文是 Design Pattern,模式是 Pattern 的汉译。所谓 Pattern 就是一种规则,或是一种模型,或是一种习惯。


     孙悟空从石头缝里蹦出来,《西游记》还介绍了这个石头的来历呢。那么我们的设计模式的介绍,当然也不例外了。说完了是什么,我们再来看看为什么这个问题。为什么会有设计模式呢?设计模式是怎么产生的呢?下面我们来具体看看。


     设计模式,这个概念首先是由一本奇书中产生的,然后就火起来的。这本书就叫《设计模式》,原名《Design Patterns: Elements of Reusable Object-Oriented Software》(1995年出版,出版社:AddisonWesly Longman.Inc),而写这本书的人是GoF(“四人帮”,又称Gang of Four,即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人)。他们在这本书里第一次将设计模式提升到理论高度,并将之规范化。该书提出了23种基本设计模式。时至今日,在可复用面向对象软件的发展过程中,新的设计模式仍然不断出现。所谓的设计模式,我们日常工作中经常用,只是我们没有像GoF一样想过,把这些日常用到的模式总结归纳,形成结构化的理论。可见,设计模式不真正是GoF提出的概念,而是他们作为一个有心人,把人们日常工作中遇到的设计问题,全面的总结,才形成了之后的“23种设计模式”。所以设计模式这个东西,原本就存在,只是我们缺少一双发现美的眼睛。


    《设计模式》这本书中,GoF 这四个人总结了 23 个经典的面向对象的设计模式,某中有 5 个创建模式,7 个结构模式,11 个行为模式。很多人都会觉得这是面向对象的设计模式,很多人也觉得非面向对象不能用这些模式。其实不然,我觉得这是一种教条主义。我们说的那23种设计模式,只是GOf用面向对象实现的罢了。就像我上面说过的那些生活中的 Pattern 一样,只要你仔细思考,你会发现这 23 个设计模式在我们的生活和社会中也能有他们的身影。比如:那个活字印刷,简单工厂;代理模式,追女孩的那个例子,采用了代理模式,结果为别人做了嫁衣;观察者模式,观察老板是否回来了?命令模式,考羊肉串。


     设计模式,设计模式,重在设计(当然了下面说的所有的设计模式都是指我们的面向对象开发的设计模式。设计所要解决的主要问题,是如何高效率、高质量、低风险的应对各种各类变化,例如需求变更、软件升级等。所以设计模式的基础还是我们的面向对象。设计的方式主要是提取抽象、隔离变化。遵循一定的设计原则,这里有先人们总结出的七大原则。

1.      单一职责

2.      里氏替换

3.      迪米特法则

4.      依赖倒转

5.      接口隔离

6.      开放-封闭

7.      合成/聚合复用原则

 

关于这七大原则的详细讲解,请关注我的后续博客。

      其实编程是一种文化,在软件这个行业慢慢的,不断的沉淀,形成了一种特有的新生的文化,就像我们一个名族的文化,几千年积累下来的,根深蒂固的,影响更深远。设计模式,在这里其实就是一种思想,一种哲学。