基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康。
过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了。提高自己,无非就有两种方式,一是看书学习,二是实践体悟。起码有两个月没怎么看过专业书和写过代码了,现在趁过年这段时间赶紧看看书,给自己充充电。
为什么要学习设计模式
在学校里面学习一些基础编程课程之后,例如掌握一门编程语言,以及学习算法与数据结构,难道我们就掌握了编程的全部了么?当然不是,如果我们只是满足于写出所谓正确的代码,输入变量,得出结果,哪怕从事了几年的软件开发都还是处在编写简单逻辑代码+复制粘贴层次。
这次的学习主要的参考资料就是程杰老师的《大话设计模式》。在程杰老师的书中,举了一个非常经典的例子,我就稍微改一改,算是照搬过来,跟童鞋们一起进行学习,体会一下,什么才是面向对象,什么才叫可维护、可复用、可扩展、灵活性好。多说一句,这是我见过的解释得最生动,最精彩的例子,没有之一。
三国演义大家都应该看过或者听说过,前两年电视剧《新三国》也火过好一阵子。据说曹操率兵攻打东吴,号称百万大军,而东吴据说只有几万兵马。曹军驻扎赤壁,浩浩荡荡,一望无际。曹操觉得统一天下应该是没问题了,那就先庆祝一下吧,所以就搞了个大Party。吃饱喝够之后呢,曹操突然觉得要显示一下自己的逼格,就出口成诗,吟道:“喝酒唱歌,人生真爽。······”。下面的文臣武将纷纷表示“好诗啊好诗”。这时候一个精于奉承的臣子就赶紧召集工匠刻板印刷,让主公诗名远扬,到时候自己好处肯定是少不了。
赶紧先印出来几张样板呈给曹操过目,曹操想了想,觉得不对,说:“喝和唱,觉得用在这里怎么有点俗气,改为‘对酒当歌’比较好。改!”。于是,工匠就很郁闷地去返工,重新刻板了。
改过之后,曹操又想了想,觉得还不够好,觉得“人生真爽”太过直白,应该改一改,说道:“当为‘人生几何’为妙。再改!”。工匠一听,只好再次加班。
在三国时期,活字印刷还没有发明出来,所以要改字的时候,就必须要整个刻板重新刻。而且,在刻字的时候,只要刻错一个字,就必须整个板废弃掉,重新刻。所以说,曹操这样的行为就有点像客户的需求变更一样,如果我们的软件开发还像雕版印刷那样,就算是天天加班都无济于事。看到活字印刷,只要更改四个字就可以了,而且不用全部重新推倒 重来。
为什么说活字印刷术基本符合了软件工程的四个要求呢?第一,要进行改动的话,只需要更改要改的字,这是可维护;第二,这些字并不是用完这次就没用了,完全可以在后来的印刷中重复使用,这是可复用;第三,如果这首诗要加字,主要另外刻字就可以了,这是可扩展;第四,字的排列其实可能是竖排可能是横排,只需要将活字移动就可以满足不同的排列需求,这是灵活性好。
我们之所以要学习设计模式,并不是把具体的某些模式原原本本地照搬来用,而是通过学习这些模式,了解到底什么是“封装变化”,“对象间松耦合”,“针对接口编程”等概念,从而设计出符合前面所讲到四个特性——易维护,易扩展,易服用,灵活性好的程序。在书中,说道学习设计模式有四个层次,分别是
- 没学之前是一点不懂,根本想不到用设计模式,写出的代码很糟糕;
- 学了几个模式之后,于是总想着要用自己学过的模式,于是时常造成误用模式而自己却不知道;
- 学完全部的模式之后,感觉模式之间都很相似,分不清差异,有困惑,但深知误用设计模式的害处,应用之时很犹豫
- 灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。
为什么说是基于java的设计模式入门?
其实设计模式是不太分哪一种语言的,估计只要是面向对象就行,例如C++、java等等。我这次的参考材料主要是程杰老师的《大话设计模式》,而里面的例子都是用C#写的,说实话看得并不是很爽。再加上我想着通过写博客来帮助我学习设计模式,所以就决定在看书的同时,通过举例java程序来描述整一个过程。
在学校的时候,《算法与数据结构》的课本我见过有基于C++的和Java的。这就说明,虽然算法与数据结构是通用的,但是在特定的讲授当中,为了能够更方便学员读懂例子和实际编译运行,用不同的语言诠释也是挺有必要的。
我的更新计划
打算通过七到十篇博客来进行这次的入门学习,就在元宵节前完成,所以至少实现两天一篇的更新,希望童鞋们监督我咯。
闲聊几句
不知道大家会不会跟我有差不多的感觉,就是会觉得过年越来越没意思了,跟小时候简直没法比。至少我就是这样,每年春节都觉得有点无聊,还得贴春联,浆糊脏手。自从上了大学有了几百几千块自己可以自主支配的生活费之后,已经很难为过年的四位数左右的压岁钱感到激动了。不过这几天自从更新了微信5.2之后,新增的“新年红包”功能又重新对红包有了感觉。
新年红包有两种,拼手气群红包和普通红包。其实都很好理解,普通红包就是送给特定一个人,规定金额。比较有意思的是群红包,限定总额和个数,每个红包随机的金额,能拿多少就全拼手气了,挺有意思。如果想发红包,必须要绑定银行卡,开通微信支付,同样地,如果想把拿到的红包提现,也必须这样做。
这个功能一出来,很多人都玩得不亦乐乎,而一些互联网名人也赞不绝口。丁香园CTO、小道消息的冯大辉就说了,新年红包这个功能的团队应该拿腾讯的年度最佳产品奖。的确,这样一个免费的扩展用户群的策略,无疑要比最近打的送钱优惠免单要来得高明得多。
推广,有时候并不需要所谓的广告,你做的好了、有趣了,大家自然而然会去用,会介绍别人一起玩。我现在写文章也是,更乐意专注于把东西写得有趣,去想别人会想读到什么样的内容。往这个方向想,只要努力对了,最后肯定是,大,家,开,心。
PS:喜欢我的闲聊么?其实我有一个微信公众账号,上面几乎每天都会发一篇文章,基本上都是类似这样的内容,就是我的一些经历感悟和想法看法。如果感兴趣的话,可以在公众号中搜索“华工小Y”添加关注。
基于java的设计模式入门(1)——为什么要学习设计模式的更多相关文章
- 选择适合入门的自动化测试框架TestNG 基于Java语言的入门选择之一
对于测试工程师新手来说,最痛苦的莫过于入门,其实只要入门3个月左右,对于自动化测试,所有的测试工程师除了喜爱,就是更爱.自动化测试工作,是从根本上解放人性,不用重复去完成鼠标的点点点,例如以下测试常常 ...
- Spring入门(8)-基于Java配置而不是XML
Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC
接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...
- Spring框架入门之基于Java注解配置bean
Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...
- 【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章<设计模式>,毕竟前面写了不少 "武功招式" 的 ...
- Spring入门学习笔记(2)——基于Java的配置
目录 基于Java的配置 @Configuration & @Bean Annotations Example 注入Bean依赖 @Import注解 Lifecycle Callbacks(声 ...
- 带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)
微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服 ...
- Java入门-浅析Java学习从入门到精通【转】
一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...
随机推荐
- easy ui 零散技巧
1.Jquery带上下文查找: 格式:$(selector,context) 例如:$("input",window.document),查找当前文档下的说有input元素,也等价 ...
- 读书笔记——body and html
在看<常见标签的默认属性值及相互作用——关于CSS reset的思考>的时候,其中说body默认的margin是8px.但是,将body的backgound-color:red:后,看到的 ...
- 【转载】Java中的回车换行符/n /r /t
source:http://hane00.blog.163.com/blog/static/1600615220126204446809/ '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标 ...
- 【Java学习笔记】foreach语句(高级for)
package p2; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java ...
- Qt 为tableview的item添加网格线
使用qss可以显示每个item的网格: selection-background-color: rgb(170, 170, 127); gridline-color: rgb(255, 255, 25 ...
- Class 'Illuminate\Html\HtmlServiceProvider' not found或者form表单不能正常使用解决办法
在laravel框架中,form不能正常使用如何处理. 网上搜到的解决方案通常都是一致的,下面分类考虑: 1,打开根目录composer.json 文件, require 里面增加: 如果larave ...
- Win7 64位 VS2013环境编译Squirrel 3.0.7
Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...
- Spring学习笔记 1. 尚硅谷_佟刚_Spring_HelloWorld
1,准备工作 (1)安装spring插件 搜索https://spring.io/tools/sts/all就可以下载最新的版本 下载之后不用解压,使用Eclipse进行安装.在菜单栏最右面的Help ...
- bower
1. bower介绍 Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系. ...
- <转>技术团队新官上任之基层篇
发表于2013-09-04 17:17| 10455次阅读| 来源<程序员>| 35 条评论| 作者高博 <程序员>杂志2013年9月刊技术团队管理EMC高博CTO 摘要:从技 ...