设计模式系列·初探设计模式之王小二的疑问

你见过凌晨四点的北京吗?

开发了一个月的项目,终于要上线了!王小二和同事们正在为今晚的上线做最后的准备。

万事俱备,只欠东风。因为项目是与D公司合作开发的,D公司上线过程中出了问题,所以王小二他们也没有办法,只能等着了。

1个小时…2个小时…5个小时过去了,大家都睡过去了。“叮铃铃…叮铃铃…”,一阵刺耳的铃声响起,原来是C哥的闹铃。

小二看看表,凌晨4点了。此时睡意全无,去找C哥聊聊天吧!

“C哥,你闹铃怎么凌晨4点就响了?”
“哈哈,你见过凌晨四点的北京吗?”

小二顿时充满敬意,原来大牛都这么努力,自己还有什么理由不奋斗呢?说学就学,再向C哥学几招。

“C哥啊,真是佩服你。上次你给我讲的面向对象,受益匪浅!”
“对,面向对象有很多优势,但你更应该深入的了解设计模式,这才是王道。”

“设计模式,一直听人说,但是不怎么了解,C哥你能给我讲讲吗?”
“好,闲着也是闲着,我就给你大体讲讲吧!”

[图:凌晨四点的北京]
《设计模式系列·初探设计模式之王小二的疑问》

现在学设计模式早吗?

“C哥,我有一个疑问。有人说我应该先把面向对象学好了之后再学设计模式。是不是现在接触设计模式有点早啊?”

“以我的经验来看,事实刚好相反。面向对象与设计模式一起学,可以大大提高你对面向对象的理解,因为设计模式与面向对象是相辅相成的。就如你吃饭时,米饭与菜一样,不能只吃米饭不吃菜吧?得一块吃。”

设计模式产生于建筑学

“小二啊,你知道吗?设计模式,最初来源于建筑学。”
“什么?建筑学?原来万事万物都有联系啊!”小二眼睛瞪得圆圆的。

“是啊。那我给你讲讲设计模式与建筑学的渊源吧。”

Long long ago,一名建筑师自问:“建筑的质量可以衡量吗?可以客观评价吗?”也就是说,建筑的设计美观与否、优秀与否,有没有客观的根据呢?有没有一个模式去衡量呢?

为了研究这个问题,这名建筑师观察了很多建筑物,他惊奇的发现:任何建筑物,优秀的结构之间总有一些相同之处。

随着研究的深入,这名建筑师认为设计不可以与要解决的问题分离。而他必须要观察出来解决相同问题的不同设计。

通过这样的方式—观察解决相同问题的不同设计,缩小了他的关注焦点,他可以洞悉优质设计之间的相似之处。他把这些相似之处称为模式。

最后,他给模式下了一个定义:“在某一情景下的问题解决方案”。

从建筑学到软件设计模式

C哥继续说道:“每种模式,你都可以无数次使用。用来解决我们重复遇到的这些问题。”
“哦哦,设计模式还挺有用的,如果掌握了设计模式,那我就可以解决很多通用的问题了。”

“是的。慢慢的,有人发现,能不能将建筑学的模式应用到软件开发呢?”
“我觉得肯定可以啊。软件开发中有很多不断重复出现的,但可以用相同方式去解决的问题。”王小二答道。

“嗯嗯,不错嘛小二。确实,大家认识到了这点后,很多人从事设计模式研究的工作。其中有四个人,他们写了一本书,书中共收录了23种设计模式,这对设计模式在软件开发中的应用产生了深远影响,大家都称他们为四人团”。

为什么要学设计模式?

“小二,说了这么多,你绝的我们为什么要学习设计模式呢?”

小二答道:我觉得吧,主要有2点:

  1. 更好的理解面向对象;

  2. 复用优秀的解决方案。因为通过复用别人优秀的设计,自己可以避免走很多弯路,针对问题能快速的提出优秀的解决方案。

“嗯,你说的没错。但还有更重要的一点,你没说到。”
“什么啊?还有其他用处?”

“学习设计模式,可以给你一个更高层次的视角去分析、解决问题,避免过早的陷入处理细节的困局。“
”有点不太明白…“

“因为面对问题,很多人会过早的去考虑实现程序的细节,但这往往会模糊了真正的问题。而设计模式,就能帮你去走出这样的思维困局,面对问题,你会站在一个更高的层次去考虑如何设计。更能清晰的去面对问题,也就能有更好的解决方案。虽然还是有点抽象,以后慢慢体会就知道了。”

”哦哦,确实是这样啊,我慢慢体会吧。“

四人团的建议

”小二,你知不知道,四人团针对创建优秀面向对象的设计提出了一些策略?“
”真的吗?什么策略“。

他们说的3点很重要:

  1. 针对接口编程;

  2. 优先使用对象组合,而不是继承;

  3. 找到并封装变化的点。

回家睡觉喽

不知不觉中,过去了2个小时,已经凌晨6点了,D公司也解决了问题。
可以上线了,不出意料,上线过程很顺利。
终于可以回家睡觉了!

更多精彩,请关注公众号“聊聊代码”,让我们一起聊聊“左手代码右手诗”的事儿。
《设计模式系列·初探设计模式之王小二的疑问》

    原文作者:设计模式
    原文地址: https://segmentfault.com/a/1190000008832461
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞