基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康。
过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了。提高自己,无非就有两种方式,一是看书学习,二是实践体悟。起码有两个月没怎么看过专业书和写过代码了,现在趁过年这段时间赶紧看看书,给自己充充电。
为什么要学习设计模式
在学校里面学习一些基础编程课程之后,例如掌握一门编程语言,以及学习算法与数据结构,难道我们就掌握了编程的全部了么?当然不是,如果我们只是满足于写出所谓正确的代码,输入变量,得出结果,哪怕从事了几年的软件开发都还是处在编写简单逻辑代码+复制粘贴层次。
这次的学习主要的参考资料就是程杰老师的《大话设计模式》。在程杰老师的书中,举了一个非常经典的例子,我就稍微改一改,算是照搬过来,跟童鞋们一起进行学习,体会一下,什么才是面向对象,什么才叫可维护、可复用、可扩展、灵活性好。多说一句,这是我见过的解释得最生动,最精彩的例子,没有之一。
三国演义大家都应该看过或者听说过,前两年电视剧《新三国》也火过好一阵子。据说曹操率兵攻打东吴,号称百万大军,而东吴据说只有几万兵马。曹军驻扎赤壁,浩浩荡荡,一望无际。曹操觉得统一天下应该是没问题了,那就先庆祝一下吧,所以就搞了个大Party。吃饱喝够之后呢,曹操突然觉得要显示一下自己的逼格,就出口成诗,吟道:“喝酒唱歌,人生真爽。······”。下面的文臣武将纷纷表示“好诗啊好诗”。这时候一个精于奉承的臣子就赶紧召集工匠刻板印刷,让主公诗名远扬,到时候自己好处肯定是少不了。
赶紧先印出来几张样板呈给曹操过目,曹操想了想,觉得不对,说:“喝和唱,觉得用在这里怎么有点俗气,改为‘对酒当歌’比较好。改!”。于是,工匠就很郁闷地去返工,重新刻板了。
改过之后,曹操又想了想,觉得还不够好,觉得“人生真爽”太过直白,应该改一改,说道:“当为‘人生几何’为妙。再改!”。工匠一听,只好再次加班。
在三国时期,活字印刷还没有发明出来,所以要改字的时候,就必须要整个刻板重新刻。而且,在刻字的时候,只要刻错一个字,就必须整个板废弃掉,重新刻。所以说,曹操这样的行为就有点像客户的需求变更一样,如果我们的软件开发还像雕版印刷那样,就算是天天加班都无济于事。看到活字印刷,只要更改四个字就可以了,而且不用全部重新推倒 重来。
为什么说活字印刷术基本符合了软件工程的四个要求呢?第一,要进行改动的话,只需要更改要改的字,这是可维护;第二,这些字并不是用完这次就没用了,完全可以在后来的印刷中重复使用,这是可复用;第三,如果这首诗要加字,主要另外刻字就可以了,这是可扩展;第四,字的排列其实可能是竖排可能是横排,只需要将活字移动就可以满足不同的排列需求,这是灵活性好。
我们之所以要学习设计模式,并不是把具体的某些模式原原本本地照搬来用,而是通过学习这些模式,了解到底什么是“封装变化”,“对象间松耦合”,“针对接口编程”等概念,从而设计出符合前面所讲到四个特性——易维护,易扩展,易服用,灵活性好的程序。在书中,说道学习设计模式有四个层次,分别是
- 没学之前是一点不懂,根本想不到用设计模式,写出的代码很糟糕;
- 学了几个模式之后,于是总想着要用自己学过的模式,于是时常造成误用模式而自己却不知道;
- 学完全部的模式之后,感觉模式之间都很相似,分不清差异,有困惑,但深知误用设计模式的害处,应用之时很犹豫
- 灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。
为什么说是基于java的设计模式入门?
其实设计模式是不太分哪一种语言的,估计只要是面向对象就行,例如C++、java等等。我这次的参考材料主要是程杰老师的《大话设计模式》,而里面的例子都是用C#写的,说实话看得并不是很爽。再加上我想着通过写博客来帮助我学习设计模式,所以就决定在看书的同时,通过举例java程序来描述整一个过程。
在学校的时候,《算法与数据结构》的课本我见过有基于C++的和Java的。这就说明,虽然算法与数据结构是通用的,但是在特定的讲授当中,为了能够更方便学员读懂例子和实际编译运行,用不同的语言诠释也是挺有必要的。
我的更新计划
打算通过七到十篇博客来进行这次的入门学习,就在元宵节前完成,所以至少实现两天一篇的更新,希望童鞋们监督我咯。
闲聊几句
不知道大家会不会跟我有差不多的感觉,就是会觉得过年越来越没意思了,跟小时候简直没法比。至少我就是这样,每年春节都觉得有点无聊,还得贴春联,浆糊脏手。自从上了大学有了几百几千块自己可以自主支配的生活费之后,已经很难为过年的四位数左右的压岁钱感到激动了。不过这几天自从更新了微信5.2之后,新增的“新年红包”功能又重新对红包有了感觉。
新年红包有两种,拼手气群红包和普通红包。其实都很好理解,普通红包就是送给特定一个人,规定金额。比较有意思的是群红包,限定总额和个数,每个红包随机的金额,能拿多少就全拼手气了,挺有意思。如果想发红包,必须要绑定银行卡,开通微信支付,同样地,如果想把拿到的红包提现,也必须这样做。
这个功能一出来,很多人都玩得不亦乐乎,而一些互联网名人也赞不绝口。丁香园CTO、小道消息的冯大辉就说了,新年红包这个功能的团队应该拿腾讯的年度最佳产品奖。的确,这样一个免费的扩展用户群的策略,无疑要比最近打的送钱优惠免单要来得高明得多。
推广,有时候并不需要所谓的广告,你做的好了、有趣了,大家自然而然会去用,会介绍别人一起玩。我现在写文章也是,更乐意专注于把东西写得有趣,去想别人会想读到什么样的内容。往这个方向想,只要努力对了,最后肯定是,大,家,开,心。
PS:喜欢我的闲聊么?其实我有一个微信公众账号,上面几乎每天都会发一篇文章,基本上都是类似这样的内容,就是我的一些经历感悟和想法看法。如果感兴趣的话,可以在公众号中搜索“华工小Y”添加关注。