大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康。

  过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了。提高自己,无非就有两种方式,一是看书学习,二是实践体悟。起码有两个月没怎么看过专业书和写过代码了,现在趁过年这段时间赶紧看看书,给自己充充电。

为什么要学习设计模式

  在学校里面学习一些基础编程课程之后,例如掌握一门编程语言,以及学习算法与数据结构,难道我们就掌握了编程的全部了么?当然不是,如果我们只是满足于写出所谓正确的代码,输入变量,得出结果,哪怕从事了几年的软件开发都还是处在编写简单逻辑代码+复制粘贴层次。

  这次的学习主要的参考资料就是程杰老师的《大话设计模式》。在程杰老师的书中,举了一个非常经典的例子,我就稍微改一改,算是照搬过来,跟童鞋们一起进行学习,体会一下,什么才是面向对象,什么才叫可维护、可复用、可扩展、灵活性好。多说一句,这是我见过的解释得最生动,最精彩的例子,没有之一。

  三国演义大家都应该看过或者听说过,前两年电视剧《新三国》也火过好一阵子。据说曹操率兵攻打东吴,号称百万大军,而东吴据说只有几万兵马。曹军驻扎赤壁,浩浩荡荡,一望无际。曹操觉得统一天下应该是没问题了,那就先庆祝一下吧,所以就搞了个大Party。吃饱喝够之后呢,曹操突然觉得要显示一下自己的逼格,就出口成诗,吟道:“喝酒唱歌,人生真爽。······”。下面的文臣武将纷纷表示“好诗啊好诗”。这时候一个精于奉承的臣子就赶紧召集工匠刻板印刷,让主公诗名远扬,到时候自己好处肯定是少不了。

               

  赶紧先印出来几张样板呈给曹操过目,曹操想了想,觉得不对,说:“喝和唱,觉得用在这里怎么有点俗气,改为‘对酒当歌’比较好。改!”。于是,工匠就很郁闷地去返工,重新刻板了。

        

  改过之后,曹操又想了想,觉得还不够好,觉得“人生真爽”太过直白,应该改一改,说道:“当为‘人生几何’为妙。再改!”。工匠一听,只好再次加班。

        

  在三国时期,活字印刷还没有发明出来,所以要改字的时候,就必须要整个刻板重新刻。而且,在刻字的时候,只要刻错一个字,就必须整个板废弃掉,重新刻。所以说,曹操这样的行为就有点像客户的需求变更一样,如果我们的软件开发还像雕版印刷那样,就算是天天加班都无济于事。看到活字印刷,只要更改四个字就可以了,而且不用全部重新推倒 重来。

          

  为什么说活字印刷术基本符合了软件工程的四个要求呢?第一,要进行改动的话,只需要更改要改的字,这是可维护;第二,这些字并不是用完这次就没用了,完全可以在后来的印刷中重复使用,这是可复用;第三,如果这首诗要加字,主要另外刻字就可以了,这是可扩展;第四,字的排列其实可能是竖排可能是横排,只需要将活字移动就可以满足不同的排列需求,这是灵活性好

  我们之所以要学习设计模式,并不是把具体的某些模式原原本本地照搬来用,而是通过学习这些模式,了解到底什么是“封装变化”,“对象间松耦合”,“针对接口编程”等概念,从而设计出符合前面所讲到四个特性——易维护,易扩展,易服用,灵活性好的程序。在书中,说道学习设计模式有四个层次,分别是

  1. 没学之前是一点不懂,根本想不到用设计模式,写出的代码很糟糕;
  2. 学了几个模式之后,于是总想着要用自己学过的模式,于是时常造成误用模式而自己却不知道;
  3. 学完全部的模式之后,感觉模式之间都很相似,分不清差异,有困惑,但深知误用设计模式的害处,应用之时很犹豫
  4. 灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。

为什么说是基于java的设计模式入门?

  其实设计模式是不太分哪一种语言的,估计只要是面向对象就行,例如C++、java等等。我这次的参考材料主要是程杰老师的《大话设计模式》,而里面的例子都是用C#写的,说实话看得并不是很爽。再加上我想着通过写博客来帮助我学习设计模式,所以就决定在看书的同时,通过举例java程序来描述整一个过程。

  在学校的时候,《算法与数据结构》的课本我见过有基于C++的和Java的。这就说明,虽然算法与数据结构是通用的,但是在特定的讲授当中,为了能够更方便学员读懂例子和实际编译运行,用不同的语言诠释也是挺有必要的。

我的更新计划

  打算通过七到十篇博客来进行这次的入门学习,就在元宵节前完成,所以至少实现两天一篇的更新,希望童鞋们监督我咯。

闲聊几句

  不知道大家会不会跟我有差不多的感觉,就是会觉得过年越来越没意思了,跟小时候简直没法比。至少我就是这样,每年春节都觉得有点无聊,还得贴春联,浆糊脏手。自从上了大学有了几百几千块自己可以自主支配的生活费之后,已经很难为过年的四位数左右的压岁钱感到激动了。不过这几天自从更新了微信5.2之后,新增的“新年红包”功能又重新对红包有了感觉。

  新年红包有两种,拼手气群红包和普通红包。其实都很好理解,普通红包就是送给特定一个人,规定金额。比较有意思的是群红包,限定总额和个数,每个红包随机的金额,能拿多少就全拼手气了,挺有意思。如果想发红包,必须要绑定银行卡,开通微信支付,同样地,如果想把拿到的红包提现,也必须这样做。

  这个功能一出来,很多人都玩得不亦乐乎,而一些互联网名人也赞不绝口。丁香园CTO、小道消息的冯大辉就说了,新年红包这个功能的团队应该拿腾讯的年度最佳产品奖。的确,这样一个免费的扩展用户群的策略,无疑要比最近打的送钱优惠免单要来得高明得多。

  推广,有时候并不需要所谓的广告,你做的好了、有趣了,大家自然而然会去用,会介绍别人一起玩。我现在写文章也是,更乐意专注于把东西写得有趣,去想别人会想读到什么样的内容。往这个方向想,只要努力对了,最后肯定是,大,家,开,心。

PS:喜欢我的闲聊么?其实我有一个微信公众账号,上面几乎每天都会发一篇文章,基本上都是类似这样的内容,就是我的一些经历感悟和想法看法。如果感兴趣的话,可以在公众号中搜索“华工小Y”添加关注。

基于java的设计模式入门(1)——为什么要学习设计模式的更多相关文章

  1. 选择适合入门的自动化测试框架TestNG 基于Java语言的入门选择之一

    对于测试工程师新手来说,最痛苦的莫过于入门,其实只要入门3个月左右,对于自动化测试,所有的测试工程师除了喜爱,就是更爱.自动化测试工作,是从根本上解放人性,不用重复去完成鼠标的点点点,例如以下测试常常 ...

  2. Spring入门(8)-基于Java配置而不是XML

    Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...

  3. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  4. JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC

    接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...

  5. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  6. 【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)

    迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章<设计模式>,毕竟前面写了不少 "武功招式" 的 ...

  7. Spring入门学习笔记(2)——基于Java的配置

    目录 基于Java的配置 @Configuration & @Bean Annotations Example 注入Bean依赖 @Import注解 Lifecycle Callbacks(声 ...

  8. 带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)

    微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服 ...

  9. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

随机推荐

  1. 框架介绍thinkphp

    ThinkPHP是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPH ...

  2. .net 批量打印可实现方案

    最近几年一直在教育行业工作,主要负责竞赛类系统的开发工作,包括网上报名,安排考场,在线考试,学业报告书等. 打印功能在这个信息化时代非常普遍,浏览器都自带打印功能,通常的做法是调用 window.pr ...

  3. OD使用教程4

    去除nag窗口: 方法一将je改成jmp跳过messageboxA 方法二全部填充成Nop,选中右键二进制Nop填充 第三种方法push的值改成1使句柄不存在 获得模块句柄: 第四种修改入口地址 点击 ...

  4. 在app中打开appStore中其他app

    var str = "https://itunes.apple.com/cn/app/zhang-jiange-hao-tou-zi-ke/id402382976?mt=8"//这 ...

  5. oracle 小题

    create table student(sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5) ...

  6. Block循环引用问题研究

    自从苹果在objc中添加Block功能支持以后已经过了很久.目前网上对于Block的使用有很多介绍.不过对于Block的内存管理问题,则是众说纷纭.再加上objc开始使用ARC以后,对于Block的内 ...

  7. iOS和Android测试区别

    1.      Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.      多分辨率测试,Android端20多种,ios较少: 3.      手机操作系统,Andro ...

  8. gulp-rev-orig

    给客户演示项目时,老是会出现由于缓存,造成的最新的样式或者效果出不来的情况,还得需要手动清除缓存操作,一方面呢,会给客户留下不好的印象,而且也会多了清缓存这一过程,和同事商量过后,决定使用在css或者 ...

  9. 大文件下载控件(down2)-示例更新-Xproer.HttpDownloader

    版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...

  10. Windows Phone 8.1 新特性 - 控件之列表选择控件

    本篇我们来介绍Windows Phone 8.1 新特性中的列表选择控件. 在Windows Phone 8 时代,大家都会使用 LongListSelector 来实现列表选择控件,对数据进行分组显 ...