Alexander在《建筑的永恒之道》中给出的模式的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。
一般意义上讲,模式包括架构模式、设计模式、编码模式或者语言惯例。
本书的关注核心在于设计原则和设计模式。
何谓设计模式?设计模式是在某种情境下,针对某种问题的某种典型、通用的解决方案。这里的关键词如下:
情境:是在特定情境下反复出现的情况,这要要求使用模式必须分析清楚事实。
问题:问题一般就是你要实现目标或要解决的目标。
解决方案:典型的、通用的解决方案。能够引人深思和举一反三的解决方案。
设计模式是被发现的,不是被创造的。
设计模式被发现了、被发现着、将被发现!
设计模式来自哪里?当然是来自人类和宇宙相互的作用。是人类长期为追求更加美好生活经验和智慧的结晶。
设计模式来自人类与宇宙的相互作用是不是太抽象、是人类追求大脑与宇宙相互作用的永恒之道的过程是不是让你想晕死呢?!
Take it easy!
其实模式理论的基本思想起源于中国。每一个炎黄子孙的血液中都留着模式的血液。模式充斥于中国历史和现实生活中各个方面,无孔不入!下面我们简要的分享一下。
《孙子兵法》到处都是模式,当然也包括设计原则。“置于死地而后生”就是其中的一种一种模式,三十六计中的“美人计”、“欲擒故纵”都是模式。现在这些模式都成了古今中外各行各业研究学习的对象。听说美军攻打伊拉克的时候就使用了《孙子兵法》中的很多战争模式。
商业中是最讲究模式又是最不讲究模式的。每次我们谈到创业或者某种商业现象时我们都会重点思考商业模式的问题,当然也包括产品的生命周期的问题。例如现在互联网的以广告为主的商业模式、以服务为主的移动增值模式、电子商务模式等。不过这又是一个不讲模式的领域,昨天就有一位哥们壮志豪情的对我我说:我要和你比谁跑的快的,不过我不和你比技术,因为和你比技术的话,正如大多数人一样,这辈子都没赢你的机会,我要在商业中和你比谁更成功、谁更有钱!但是我只能说多多指教啊。不知道在哥们是否已经精通了一切模式,到了可以乱来的地步呢?
中国古代的法律中的很多部分都是遵循案例法的,无独有偶,现在欧洲国家一般也采用案例法的形式。所谓案例法基本意思就是说在解决现实问题前先研究一起的案例,然后举一反三,根据现实情况举一反,快速而准确的解决现实问题。
医学中也是如此,例如扁鹊的“望闻问切”。望,指观气色;闻,指听声息;问;指询问症状;切;指摸脉象。合称四诊(four diagnostic methods)。“望闻问切“是一般的中医的看病的一半步骤。这是不是很像模板模式呢?
现实世界中每个国家和地区都在追求自己的最佳发展模式,喔,模式!又是模式!中国一直在探求中国特色的自己特色的发展道路。到时中国要收回香港主权的时候,小平同志就创造性的提出了一国两制的构想,丰富了中国特色模式的道路。
爱情作为一个古老而常青的话题,被人们创建出了无数的模式,不必说卓文君带着司马相如私奔,不必说梁山伯与祝英台的可歌可泣,更不必说现在各种感情剧的的流行,但就说无数的人迷恋牵涉情爱的网络游戏就可见一斑了,是非几乎所有的人都想成为她的救世主。大家更熟悉的就是郎才女貌模式、英雄救美模式等等。而且歌手阿杜为了找到爱情的永恒模式,竟说自己翻破了爱情的秘籍,最后找到了四个字“坚持到底”!不知道这个“坚持到底“是否真的的有用。但是我知道在实现梦想中”坚持到底“的模式是绝对重要的,深度决定高度和广度嘛!只用你能坚持到底,甚至”跪着生“,最后可能也会向马云一样”拿望远镜都找不到对手“。
比尔盖茨曾说,他对员工的控制只会加强,永远的掌控,让员工在图灵面前哭泣吧。而在网络中听到关于微软软件开发过程的介绍中,其中非常重要的就是遵循绝对严格的步骤,这些都是模式。当然微软对创新是比较宽容的,这或许是未来寻求新的更好的模式吧。
既然我们生活中的各个方面都存在着模式,或者说我们生活的一切都是按照模式运行,我们是否可以到处套用模式,模式不就是为了套用的吗?呵呵,当然不能随便套用!必须在合适的情境下、针对合适的问题才能采用。就是要实事求是。如果不考虑使用场合,随便套用看病的模式,那医院就没有存在的必要了,生病了去Google一下不就OK了吗?可以是事实去不是如此,要懂得辨症用药!三国演义中的马谡随便套用了“置之死地而后生“的模式,签下了军令状,导致几乎全军覆没。结果自己被砍头,如果不是诸葛亮仁慈,唯恐他妻儿也死罪难逃。
不过也感谢这些对模式不合适应用的现象,这产生了反模式。
反模式描述“对产生绝对负面结果的问题的一种常用解决方案” --------- 旨在通过向人们展示如何避免常见的陷阱来解决问题的另一半。
当然诸多模式也可以联手,例如开发中如日中天的MVC模式就是设计模式联合优化的一种模式。当然,准确的说,MVC不能说是设计模式,因为MVC划分的维度过大,MVC属于架构模式。
在模式中,在一些比较重要的场合或者一个比较重量级的书中,你可能时不时的听到“力“这个关键字,不要被”力“搞糊涂了!按照笔者的理解,”力“是实现目标的约束条件,这种约束条件可能把你带向光明的一面-实现目标,也可能带入痛苦的深渊-远离目标。
其实每一种事物都是在在各种力的相互作用下存在和发展或者毁灭的。正如地球的外貌是各种相互作用的结果一样,软件分析、设计、开发、测试以及维护的各个阶段也都是各种力相互平衡的结果。
这个世界没有偶然。愿力与您同在!