自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 致 永不止步的我们

致 永不止步的我们序2020年注定是不平凡的一年,我们携手同心抗击疫情,谱写了毕业学年不一样的华章。四载学涯,今有所成;师恩难忘,同窗情长;相逢即又告别,归帆又离岸。愿大家带着母校深深的祝福和殷殷的嘱托,追逐梦想,奋力拼搏,不负韶华,只争朝夕,热情谱写飞扬的青春,执着描绘璀璨的人生。此去经年,愿所得皆所期;愿岁月安好,归来仍是少年!2020年6月去年的六月份发生了一件全球震惊的事情,科学家通过观测计算发现,距太阳系一光年以外的一颗星星爆炸了。今年六月,正好能在夜晚看到那遥远的光。不归者距

2021-06-11 21:42:27 192

原创 《重构 改善既有代码的设计》 读书笔记(二十三)

第一步:观察被overdraftCharge()使用的每一项特性,考虑是否值得将它们与overdraftCharge()一起移动。由于超支天数daysOverdrawn会随着账户不同而不同,所以需要把它留在Account类中。然后,将overdraftCharge()复制到AccountType中,做一些调整。class AccountType { boolean isPremium() { return true; } double overdraftCharge(int daysOverd

2020-10-20 21:38:04 256 1

原创 《重构 改善既有代码的设计》 读书笔记(二十二)

6.9 替换算法(Substitute Algorithm)你想要把某个算法替换为另一个更清晰的算法。将函数本体替换为另一个算法。String foundPersone(String[] people){ for (int i = 0; i < people.length; i++){ if(people[i].equals("Don")) return "Don"; if(people[i].equals("John"))

2020-10-20 21:20:46 192

原创 《重构 改善既有代码的设计》 读书笔记(二十一)

6.6 分解临时变量(Split Temporaray Variable)你的程序有个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。针对每次赋值,创造一个独立、对应的临时变量。double temp = 2 * (height + width);System.out.println(temp);temp = height * width;System.out.println(temp);>>>final double temp1 = 2 * (he

2020-10-18 22:36:29 242

原创 《重构 改善既有代码的设计》 读书笔记(二十)

做法简单情况的步骤:找出只被赋值一次的临时变量。我们之前说过,如果临时变量被赋值多次,那么意味着它的分割不会有任何影响,我们可以使用分解临时变量(6.6 Split Temporary Variable)来分割。这样的好处就是,让结构更清晰,更好被提炼。将只被赋值过一次的变量声明为final。如果它的确只被赋值过一次,那么这样做不会报错,否则会报错。编译。把临时变量被赋值的右侧的表达式提炼成一个独立函数出来。通常情况,一开始提炼函数时总会将其设置成privat

2020-10-14 22:52:54 272

原创 《重构 改善既有代码的设计》 读书笔记(十九)

6.2 内联函数(Inline Method)如果一个函数本体和名称一样清楚易懂,就意味着这个函数没有什么作用,此时就可以去除函数调用,替换成函数中的内容。动机提炼函数有个度,过度提炼后,会发现小函数无处不在,特别频繁,此时就应该考虑,是不是有些函数可以合并起来呢?提炼函数从某种意义来讲是一种间接性的体现,它可能带来帮助,但没必要的间接性会适得其反。除此之外,还有一种需要使用内联函数的情况:当手头上的函数东一头西一头,逻辑很乱时,考虑将它们内联成一个大型函数,然后再分解成条理的小函数。在进行以

2020-10-13 22:50:19 160

原创 《重构 改善既有代码的设计》 读书笔记(十八)

第六章 重新组织函数在重构过程中,最常遇到(或者最容易察觉)的坏味道是过长函数(3.2节),其次是重复代码(3.1节)。为了对付这两种,最有效的就是对其结构进行提取、整理、精练,所以,迎面向我们走来的是提炼函数(6.1 Extract Method)。当我们多次提炼后,发现有一部分函数体积不大,功能不多,不是很有必要提炼,此时我们就会说,“错了,使用内联函数(6.2 Inline Method)重构,把一些小函数合并到稍大函数中吧。”在提炼函数过程中,一个困难是处理局部变量。之前我们提到过,处理局部

2020-10-12 22:24:16 198

原创 《重构 改善既有代码的设计》 读书笔记(十七)

5.1 重构的记录形式这本书介绍重构的标准格式序号步骤内容1名称建造一个重构词汇表,名称很重要,这个名称将会被用在此书任何地方。2简短概要简单介绍这种重构方法的使用场景,以及它所做的事情。这能让你更快地找到所需的重构方法。3动机为什么需要这种重构方法,什么情况应该使用这个,什么时候不应该使用4做法简明扼要地一步一步介绍如何进行此重构5范例一个简单的例子,说明这种重构方法的过程概要内容:包括三个部分。一句话,介绍这个重构能够

2020-10-11 22:14:26 138

原创 《重构 改善既有代码的设计》 读书笔记(十六)

4.2.1 单元测试和功能测试先讲讲单元测试和功能测试的差异。单元测试:目的是为了提高程序员的生产率。它是高度局部化的东西,每个测试类都隶属于单一包它能够测试其他包的接口,除此之外它将假设其他包一切正常。功能测试:目的是为了保证软件能够正常运作。从客户的角度保障质量,并不关心程序员的生产力。它们应该由一个专门的找BUG团队去负责开发,这个团队应该使用重量级工具和技术来帮助开发良好的功能测试。当功能测试中出现问题时,要除去它至少做两件事。1、修改代码。2、编写单元测试,

2020-10-11 22:01:27 206

原创 《重构 改善既有代码的设计》 读书笔记(十五)

第四章 构筑测试体系如果你是第一次看我这个《重构 改善既有代码的设计》 读书笔记系列,那么我建议你不要一开始看这一节,因为它的确的确很无聊。可靠的测试是安全重构的前提。4.1 自测试代码的价值一套测试就是一个强大的BUG侦测器,能够大大缩短查找BUG所需要的时间。但我们都很懂,编写测试代码,意味着额外的时间,额外的精力,除非真正地感受到这种方法对编程速度的提升,否则自我测试是没有意义的。(体现不出它的意义)在通常情况下,我们的测试是手动运行的,如果测试变得自动化,能够自动告诉错误出现在哪里

2020-10-09 22:23:43 280

原创 《重构 改善既有代码的设计》 读书笔记(十四)

3.16 中间人(Middle Man)委托:一个方法直接写功能逻辑,这是亲历亲行;一个方法调用了别的类中的方法,这就是委托。在面向对象中,一个惯用的伎俩就是委托,这是随着‘封装’一同产生的。封装:对外部世界隐藏其内部细节。委托是个好东西,但不能滥用:某个类有一半的函数都委托给了其他类,这就是过度运用。(此时此地,其实充斥着依恋情结(3.7节)的味道)在过度运用委托时,就意味着产生了过多的中间人,这时就该使用移除中间人(7.6 Remove Middle Man)。移除中间人(7.6

2020-10-08 17:26:07 278 1

原创 《重构 改善既有代码的设计》 读书笔记(十三)

3.13 夸夸其谈未来性(Speculative Generality)关于程序的可扩展性,其实有很多说法,但大多数都是空想——不结合需求的框架不是好框架。如果说,在编写一个框架时,考虑所有所有的情况,那么这个框架必然是庞大的,有些东西是用户无法用得着的。(虽然可扩展性很好,但是没用到的,也不可能用到的就是废代码)可扩展性往往体现在抽象类上,如果你发现,在当前需求下,这个抽象类没有太大作用,那么就运用折叠继承体系(11.9 Collapse Hierarchy)将抽象类与子类合二为一。折叠继承体系

2020-10-04 22:14:46 241

原创 《重构 改善既有代码的设计》 读书笔记(十二)

3.8 数据泥团(Data Clumps)在‘3.2 过长函数’中,我们第一次提到‘数据泥团’这个东西。数据泥团:总是绑在一起出现的数据,就好像一家人一般。当数据泥团出现时,我们就要考虑,是否应该把它们组合成一个类,这样是否合适,如果确定要组合,那么要参考以下方法:提炼类(7.3 Extract Class):相关字段放到一个新类中。引入参数对象(10.9 Introduce Parameter Object):用对象代替多个参数。保持对象完整(10.7 Preserve Who

2020-10-03 22:35:08 355

原创 《重构 改善既有代码的设计》 读书笔记(十一)

3.4 过长的参数列(Long Parameter List)将方法中所需的所有东西都以参数的形式传递进去,这很好理解,因为那些参数都是方法中必要的部分,但正因如此,才会有‘过长的参数列’这种坏味道。面向对象解决了一部分问题——方法所需的东西不一定要以参数形式传递,在方法的内部可以通过一个对象来自己调用获取这些参数。太长的参数列难以理解,太多参数容易造成前后不一致,不易使用,也不易修改。在‘3.2 过长函数’中,我们已经提及过这种坏味道以及对应重构的方法,在这里重新介绍一下。每一次回顾都是有必

2020-10-02 23:04:31 311

原创 《重构 改善既有代码的设计》 读书笔记(十)

3.2 过长函数(Long Method)想想看第一章中的例子,那个又臭又长的statement()方法。很明显,里面的内容虽然有用,但是过于死板,充满着坏味道。没有接触过面向对象技术,或者初学的人,往往会觉得,面向对象的程序拥有无穷无尽的委托,全然不如面向过程的好。只有在程序变得庞大,业务变得复杂时,才会知道,这种技术有着多大的价值。拥有短函数的对象会活得比较好,因为这些‘小零件’起到了‘间接层’的作用。让我们回顾一下间接层是什么:间接层首次亮相于‘2.4 怎么对经理说’。我们回顾一下它的优点

2020-09-30 22:54:24 236

原创 《重构 改善既有代码的设计》 读书笔记(九)

第三章 代码的坏味道优秀的程序员,就像一名猎人,穿梭在茂密的丛林中,寻找着一闪而过的猎物。精准、高效、灵敏,这是生存的法则,我们,作为猎人,绝不能被困住,我们要解决它们。没有任何量度规矩比得上一个见识广博者的直觉。我们只会告诉你一些迹象,它会指出“这里有一个可以用重构解决的问题”。你必须培养出自己的判断力,学会判断一个类内有多少实例变量算是太大、一个函数内有多少行代码才算太长。3.1 重复代码(Duplicated Code)重复代码的表现形式:同一个类中两个方法含有相同的表达式。两个互

2020-09-29 22:37:37 167

原创 《重构 改善既有代码的设计》 读书笔记(八)

2.4 怎么对经理说怎么向别人解释,重构不影响效率:客观来讲,重构会影响近期的开发效率,但是就长远看来,重构是一种高效的开发形态。计算机科学是这样一门科学:它相信所有问题都可以通过增加一个间接层来解决。间接层的价值:允许逻辑共享。比如函数可用于不同的地方;超类中的方法被所有子类共享。分开解释意图和实现。如果类和方法内部以很小单元的意图来编写,那么每一个方法都可以用很简洁的话来表述。隔离变化。如果只有一个类,那么我有可能会在两个不同地点使用这么一个类对象,此时,当我想要更改一个地点

2020-09-28 22:15:42 239

原创 《重构 改善既有代码的设计》 读书笔记(七)

1.5 结语以上就是本次例子的全部内容了,让我们回忆一下用到的重构方法吧。只说名字,你能想起来吗?名称英文简介提炼函数6.1 Extract Method一个方法过长时,就要考虑提炼成一个个小方法搬移函数7.1 Move Method当你感觉这个方法不应该属于这个类时,就考虑搬移到更合适的地方吧以查询取代临时变量6.4 Replace Temp with Query这会降低性能,但这是为了让程序更具有结构性自封装字段8.1 Self Encapsul

2020-09-28 22:02:57 216

原创 《重构 改善既有代码的设计》 读书笔记(六)

1. 状态/策略取代类型码(8.15 Replace Type Code with State/Strategy)要转换成状态模式(或策略模式)前,需要确保任何时候都能通过取值函数和设值函数来访问对象变量,这叫做自封装字段(8.1 Self Encapsulate Field)。所以我们要把Movie中直接引用字段的地方改为通过getter和setter方法调用://在这里仅在构造方法中直接使用变量public Movie(String title, int priceCode) { super(

2020-09-27 22:33:17 662

原创 《重构 改善既有代码的设计》 读书笔记(五)

1.4 运用多态取代与价格相关的条件逻辑1.4.1 getCharge()的再加工早在1.3.2搬移函数的时候就说过,getCharge()方法还有改进的余地,只不过当时书里没有提,我也没个准确的答案,所以就暂时放下了,而现在,要开始对它开刀了。回顾一下这个方法://Rental类中/** * 获取收费的金额 * * @author newre * @return */public double getCharge() { double result = 0; switch (t

2020-09-26 21:48:12 267

原创 《重构 改善既有代码的设计》 读书笔记(四)

1.3.4 练习:重构常客积分计算下面我们的关注点可以放在frequentRenterPoints这个变量上,好好思考一下应该怎么去重构这一部分。提炼函数就像之前那样,找到局部变量与参数。很明显,each和frequentRenterPoints。所以我们可以提炼出一个新的函数:getFrequentRenterPoints()。搬移函数就和之前一样,提炼出的方法和Customer没有什么关联,也需要放到Rental类中。以查询取代临时变量注意!和之前不一样的是,每循环一次,f

2020-09-26 21:35:25 189

原创 《重构 改善既有代码的设计》 读书笔记(三)

1.3.2 搬移函数(7.1 Move Method)当你发现,A类中的某个方法与B类交流更频繁,那么就需要考虑,将A类中的那个方法设法搬移到B类中。搬移函数:在该函数最常引用的类中建立一个有着类似行为的新函数。然后将旧函数变成一个单纯的‘中转站’,或者干脆将旧函数移除。通过观察amountFor()方法可以得到一个结论:此方法中,仅仅涉及到了Rental对象,并没有出现它所在的类(Customer),所以按照搬移函数的说法,我们应该把它设法移到Rental类中。首先,将代码复制到Rental类

2020-09-24 23:14:44 145

原创 《重构 改善既有代码的设计》 读书笔记(二)

1.1 起点实例名称:影片出租店程序功能:计算每位顾客的消费金额并打印详单。需求:输入信息(哪位顾客租了哪些影片、租期多长),然后让程序计算费用。影片分为普通片、儿童片、新片。除计算费用外,还要为常客计算积分,积分根据是否是新片有所不同。UML类图如下:/'在线作图(UML)网址:http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000如果要修改的的话,打开网址后,直接复制上图片链接(或者粘贴下方代码)修改

2020-09-23 22:30:31 155

原创 《重构 改善既有代码的设计》读书笔记(一)

前言重构的定义:在不改变软件可观察行为的前提下改善其内部结构。“不改变软件行为”只是重构的最基本要求。要想真正让重构技术发挥威力,就必须做到“不需了解软件行为”。重构需要靠时间来磨练,养成一套整理程序规范必不可少。结构与解构:建立完美的需求与设计,按照既有的规范编写标准划一的代码,这是结构的美;快速迭代和RAD颠覆“全知全能”的神话,用近乎刀劈斧砍的方式解决问题,这是解构的美。RAD(快速应用开发):是软件开发过程模型,强调极短的开发周期。这种速度是依靠大量的重构方法来维持的(简单说的

2020-09-21 19:31:59 138

原创 《深入理解Java虚拟机》第三版读书笔记(四)

武林盟主:HotSpot VM:不是亲生的;上错花轿嫁错郎;成了一家人,进了一家门

2020-01-03 20:51:41 333

原创 问题:final修饰的变量能否在定义时不初始化?

问题:final修饰的变量能否在定义时不初始化?首先,先看一下final可以修饰哪些东西:final可以修饰类、变量、方法。final修饰的类不能被继承final修饰的方法不能被重写final修饰的变量是一个常量,只能被赋值一次修饰的类不可继承,所以不能修饰抽象类。那么final是否可以修饰内部类呢?package com.newre.demo2;public class ...

2020-01-03 12:13:32 2684

原创 《深入理解Java虚拟机》第三版读书笔记(三)

了解Java虚拟机的运作虽然不是普通开发人员必备的,但是,如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。学习虚拟机中各种自动运作特性的原理是程序员成长之路上最终会接触到的一课。

2020-01-02 21:43:30 725

原创 《深入理解Java虚拟机》第三版读书笔记(二)

深入理解Java虚拟机(2)走进Java第一章 走近Java1.1 概述Java优点:结构严谨面向对象摆脱硬件平台束缚:一次编写,处处执行相对安全的内存管理和访问机制:避免大部分内存泄漏及指针越界热点代码检测运行时编译及优化完善的应用接口程序拥有实现各种功能的第三方类库1.2 Java技术体系广义上的Java技术体系:Kotlin、Clojure、JRuby、G...

2020-01-01 22:53:56 309

原创 《深入理解Java虚拟机》第三版读书笔记(一)

了解Java虚拟机的运作虽然不是普通开发人员必备的,但是,如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。学习虚拟机中各种自动运作特性的原理是程序员成长之路上最终会接触到的一课。

2020-01-01 11:34:22 2257

原创 jdk11 SpringBoot整合Hibernate时的坑!!

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed;

2019-12-09 21:13:47 692

原创 Mybatis的官网目录结构介绍

MyBatis介绍网址 官网 https://mybatis.org/mybatis-3/zh/index.html 中文网 http://www.mybatis.cn 简介MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis几乎避免了所有JDBC代码和手动设置参数以及获取结果集。它能够使用简单的XML...

2019-11-05 08:50:09 1223 1

原创 Linux下的Web环境搭建

目录1 准备包2 安装需要XShell支持的传输文件的软件3 解压命令4 配置jdk1.85 安装MySQL6 安装配置Tomcat服务器7 安装redis1 准备包 apache-tomcat-9.0.26.tar.gz Tomcat9服务器 jdk-8u212-linux-x64.tar.gz ...

2019-10-30 07:36:45 832 2

原创 商城实战项目3:dao层开发(二)

目录第一步,定义SQL语句的接口第二步,定义SQL语句抽象实体类第三步,定义SQL语句不同类型的实体类第四步,定义生产SQL语句的工厂类第五步,改进dao层实现类这三天来我们开始练习做项目,分成了很多组,我在我们组中充当项目经理的角色,负责思考项目结构、分配任务等工作。商城实战项目链接:商城实战项目2:dao层开发(一):https://blog.csdn.net...

2019-10-12 07:16:07 230

原创 商城实战项目2:dao层开发(一)

目录第一步,实体类设计第二步,dao层接口设计第三步,编写dao层实现类第四步,总结这三天来我们开始练习做项目,分成了很多组,我在我们组中充当项目经理的角色,负责思考项目结构、分配任务等工作。商城实战项目链接:商城实战项目2:dao层开发(一):https://blog.csdn.net/NewReErWen/article/details/102513401商城...

2019-10-12 06:37:56 447

原创 UML类图设计

UML,统一建模语言(Unified Modeling Language),用于说明、可视化、构建和编写一个系统。在UML系统开发时主要使用三个模型:功能模型(展示系统实现的功能):包括用例图。对象模型(展现系统中各个对象之间的联系):包括类图、对象图。动态模型(展示系统内部运作):包括序列图,活动图,状态图。

2019-10-10 07:14:33 761

原创 共享的思想--20191008

学习maven,其实应该先谈一下关于构建JavaEE的项目。随着越来越深入的学习,我们都能感觉到,jar包越来越多,每次导入jar包的事件很长,项目加载的时间也很长。那么,这样的问题如何解决?说白了就是共享。可以从面向对象的角度思索一下:面向对象怎么来的?从封装,到继承,最后多态与抽象。封装解决了数据的冗余,继承解决了结构的冗余,多态和抽象解决了需求的冗余。但凡出现冗余,就面临...

2019-10-08 20:26:09 142

原创 简单工厂设计模式应用:学生管理系统

今天看了一下简单工厂设计模式,突然觉得可以替代学生管理系统的部分内容,就按照工厂模式的套路整了一下,不过这还只是一个结构,具体内容的填充还需要在逐步测试中进行。共有三部分:工厂类、“零件”的基类、零件。工厂类OptionFactory:public abstract class OptionFactory { public static Option createOption...

2019-10-03 19:50:09 1069

原创 如果累了--随笔

这几天有些不在状态,学习的时候总会打会儿瞌睡,好不容易精神了一会儿,又觉得脑子里面乱糟糟的,静不下心来。今天早晨六点多起来,坐在书桌前愣是三四分钟没有动键盘鼠标,感觉毫无思绪,于是索性就放空大脑,休整休整。然而,玩了一整天,并没有感觉很舒服,反而感觉心里栓了根绳:作业还没写完,知识点还没理完,今天的任务还没有完成,这能行吗?玩了一整天的游戏,想了一整天的学习,一整天就这样过去了,一整天就这样废...

2019-09-30 20:53:06 202

原创 jQuery Ajax小结

通过HTTP请求加载远程数据 它是jQuery底层AJAX实现,更多的高层实现可以使用$.get , $.post 等。 $.ajax()返回其创建的XML HttpRequest对象, 大多数情况不必使用此函数,而是使用高层实现。

2019-09-28 08:23:02 164

原创 回调函数的应用:Java监听器--20190926

昨天晚上看jQuery的API,发现一个回调函数的板块,出于好奇看了一眼,没怎么细看。后来复习Java监听器,发现,其实这个监听器就是回调函数,在此详细介绍一下Java监听器。监听器的种类有如下几种:……

2019-09-26 07:23:38 411

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除