设计模式入门

设计模式入门

最近一直在学习设计模式,打算把我所学习的东西在博客里面记录下来。我学习设计模式所用的书是O’Relly出品的《Head First设计模式》,这个系列还是十分出名的。其实很多开发者从始至终并未系统的学习过设计模式,而是从一次次的编程中和前人的教诲中领悟得来。但是其中走过的弯路,吃过的苦头,只有他们自己才知道。通过学习设计模式,我们才可以在开发时站在巨人的肩膀上!


1、什么是设计模式

那到底啥是设计模式呢?总的来说,设计模式是建立在设计原则之上,被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结(百度百科说的奏是好)。使用设计模式,可以使代码更清爽简洁,程序更高效强大,结构更易被其他开发者所理解,后期也更易维护。设计模式好比是风筝的框架,大船的龙骨(我去我这比喻好恰当,不要问我龙骨是什么),让一切更加科学、有序、健壮。

最近NBA看的比较多,就用篮球打个比方吧。在篮球场上,不要只去关注啦啦队(但是要看啦啦队记得买坐在前面的票,嘿嘿嘿),咳,我们要注意的是战术。篮球中的战术就好比是程序中的设计模式,一个球队围绕着战术去打球,就好像依照着某种设计模式去编程,会有更好的效率、章法和观赏性。NBA中,我个人比较喜欢马刺队,因为马刺队虽然老骥满营(除了小莱),但却依靠着超强的战术执行力,总能战胜阵容强劲的对手。而设计模式和战术一样,都是逐渐被发明、改进、沿袭下来的。

在当年还没有三分线的时候,球员都扎堆在内线,防守也收缩于篮下,因为你隔着再远投篮也就是两分。这让进攻和防守的套路捉襟见肘,也让身高成为篮球的绝对优势(现在想想都好痛苦啊。。。。身高不足压力山大)。而在出现了三分线以后,随着时间的推移进攻和防守的战术慢慢丰富了起来,篮球也不再仅仅是大个子的天下。进攻上跑轰,三角进攻,普林斯顿体系,突破分球等等逐渐被人认可,而防守上二三联防,包夹,协防,绕前等也效果尚佳。举个近一些的例子,如日中天的大鲨鱼奥尼尔在内线横行霸道的时候,时任小牛队教练的老尼尔森采用了砍鲨战术(hack-a-shaq,奥胖子是真的罚不进去。。),获得了不错的效果,其他球队纷纷效仿,时至今日仍有砍霍战术和砍小乔丹战术。设计模式也是如此发展而来并广为应用的。


2、设计模式的好处

那么设计模式具体的好处是如何体现的?我们来说个很现实的例子。就一个APP来说,开发过程中,没有系统的设计会让代码结构紊乱,无法复用,导致研发步履维艰。而更可怕的在后面,虽然开发过程可能仅仅需要几个月,但后期的运营和维护可能是几年甚至几十年(要像LOL一样一年几十个补丁要累死人的)。当我们需要更新代码或者添加功能的时候,设计不科学的代码会让我们的工作难上加难,工作量增大不说,而且会牵一发而动全身,更新或维护一次需要改动大量的代码(比如LOL针对里面亚索的风墙,我们不可能去其他所有拥有飞行道具技能的英雄代码里面加上if遇到风墙destroy,这样会累死的)。这些对于APP的开发和维护人员来说简直是梦魇。而应用科学了设计模式的代码,可以让你很轻松的实现更新和新功能,让一切都井井有条,大幅缩减后期维护和更新的成本。所以,这是设计模式最大的好处(个人观点,不喜勿喷)。

而另一方面,设计模式可以让你和其他开发人员有共享的词汇,让交流沟通高效无阻碍。可以把思考架构的层次提高到模式层面,而不是仅仅停留在琐碎的对象和零零散散的方法语句上。再打一个比方,比如点菜(除了运动和玩就是吃,我这比方打得也是没谁了)。小明和小刚去饭店吃饭,小明点菜时说要那个炸过的土豆加辣椒茄子炒的菜,再来一个粉条和肉末一炒,服务员听的一头雾水,而旁边的小刚则说来一份地三鲜和蚂蚁上树(再来一盆米饭,我就够了。)。其实两者形容的都是同样的菜,但是小明就好像是没有学过设计模式的程序员,在代码上不规范,而小刚有很好的设计模式素养,在与别人交流沟通的时候就易如反掌。


3、如何应用设计模式

当你学会设计模式后,还远远不够,学会和学以致用完全是两个不同层面的意思(我想上过高中被文综理综折磨过得的人基本都清楚)。而且很多时候,我们将面临的是多种设计模式融合的复杂情况。因此,要想站在巨人的肩膀上是要付出代价的。就好比要想能够在篮球比赛中顺畅的执行战术,需要队员们一次次的磨合、训练。设计模式亦是如此,前人设计经验的总结,我们也需要花费时间去慢慢的剖析,咀嚼,体会个中滋味。每个设计模式都是无数行代码的精华,要学好这些精华,我们需要做的也是同样的工作。后面的学习中,我会贴出代码,希望读者可以不吝啬自己的时间去自己敲打一番,更直观的学习设计模式。


2016.4.7 10:55
By Mr.Losers


你可能感兴趣的:(设计模式)