代码重构在不改变软件系统外部行为的前提下,改善它的内部结构,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

代码重构目标

持续纠偏和改进软件设计

随着项目的开发,程序代码逐渐腐败变质,愈来愈像断线的风筝,脱缰的野马无法控制;

对代码进行整理重构,让所有带着发散倾向的代码回归本位。

帮助发现隐藏的代码缺陷

重构代码可以加深对之前代码的理解,发现软件设计的不足,找出其中的问题和隐患,构建出更好的代码。

提高编程效率

从长远来看,代码重构,改善设计、提高可读性、减少缺陷,可以提高软件开发后续的效率。

代码重构技巧

提炼重复代码

代码重构最常见有效的手法就是提炼重复代码。

发现重复代码,将其提炼到合适的方法中,减少总代码量

class BadExample {

public void someMethod1(){

//code

System.out.println("重复代码");/* 重复代码块 */

//code

}

public void someMethod2(){

//code

System.out.println("重复代码");/* 重复代码块 */

//code

}

}

/---------------------分割线----------------------/

class GoodExample {

public void someMethod1(){

//code

someMethod3();

//code

}

public void someMethod2(){

//code

someMethod3();

//code

}

public void someMethod3(){

System.out.println("重复代码");/* 重复代码块 */

}

}

分割冗长方法

将某些冗长的方法进行分割,使每个方法都能实现某种子功能,遵守单一原则,也可提高方法的可重用度。

优化嵌套条件分支

1、将不满足某些条件的情况放在方法前面,并及时跳出方法,以免对后面的判断造成影响。

class BadExample {

public void someMethod(Object A,Object B){

if (A != null) {

if (B != null) {

//code[1]

}else {

//code[3]

}

}else {

//code[2]

}

}

}

/---------------------分割线----------------------/

class GoodExample {

public void someMethod(Object A,Object B){

if (A == null) {

//code[2]

return;

}

if (B == null) {

//code[3]

return;

}

//code[1]

}

}

2、将条件分支合并,使代码清晰

class BadExample {

public void someMethod(Object A,Object B){

if (A != null) {

if (B != null) {

//code

}

}

}

}

/---------------------分割线----------------------/

class GoodExample {

public void someMethod(Object A,Object B){

if (A != null && B != null) {

//code

}

}

}

模拟柯里化,消除过长参数列表

柯里化(Currying),把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数。

将多个参数封装成一个对象传递给方法,从而去除过长的参数列表。

提取类中使用到的常量

消除一些魔数或者是字符串常量

class BadExample {

public void someMethod1(){

send("您的操作已成功!");

}

public void someMethod2(){

send("您的操作已成功!");

}

}

/---------------------分割线---------------------- /

class GoodExample {

protected static final String SUCCESS_MESSAGE = "您的操作已成功!";

public void someMethod1(){

send(SUCCESS_MESSAGE);

}

public void someMethod2(){

send(SUCCESS_MESSAGE);

}

}

精练类的方法,让类提供该提供的方法

定义类方法时,要让这个类拥有它该拥有的方法,做它该做的事。

提取继承类中重复的属性与方法到父类

将子类中某些公共的属性或方法,提取到父类中。

lambda取代内部类

将匿名内部类转为Lambda表达式。Java8中让人又爱又恨的Lambda表达式

//匿名类

Runnable r1 = new Runnable() {

@Override

public void run() {

System.out.println("Hello");

}

};

//Lambda表达式

Runnable r2 = () -> System.out.println("Hello");

消除巨类

当一个类拥有太多的代码时,就需要对其拆分,提取出该类不需要承担的职责。

清理冗赘类

Java中类并不是越多越好。清理合并那些没有什么实际作用的类

代码重构需要单元测试来支持,能够确保修改的代码不会带来大的影响。代码重构对提升编程技巧非常有帮助,只有发现代码中的问题和缺陷,进行合理的修改重构,才能有针对性地规避某些错误。

以上就是小编为大家分享的所有内容,有想了解更多资讯或相关知识,可以关注学佳澳官网或微信公众号“学佳澳工程实训联盟”。学佳澳一家专业的IT培训机构!另外“学佳澳牛人课堂”微信公总号免费公开课全面上线,一大批干货正在路上,想看的朋友记得点关注哦!

java编程代码大全_掌握Java编程技巧,代码重构相关推荐

  1. 应用程序编程接口大全_应用程序编程接口101

    应用程序编程接口大全 Do apps like Uber, Pokémon Go and Zomato build their own maps to show where available car ...

  2. 天然气故障代码大全_美的燃气热水器故障代码大全

    现在的燃气热水器出现问题都会有代码提示,这样大大方便了判断和维修.那么美的燃气热水器故障代码是什么意思呢?本文小编来给大家介绍一下. 美的燃气热水器故障代码大全 1.E1:点火失败或中途熄火 ①由于火 ...

  3. 代刷装修音乐代码大全_代刷网音乐代码 | 手游网游页游攻略大全

    发布时间:2016-03-19 伤害世界私服怎么刷物品 物品代码怎么用详解.是近期很热门的一款游戏,而有些玩家在游戏中出现了代码不能用,输入指令刷不出东西的情况.有些玩家在私服可能用 ... 标签: ...

  4. java代码大全_各种java技术文章汇总整理

    老哥简介 大家好,我是IT老哥.我大学四年读的数学专业,通过一路的自学走到今天.目前在一家大厂做高级java开发工程师.我会分享我的职场经验.java技术.java自学资料等等.我能通过自学进入大厂, ...

  5. vb初学者编程代码大全_学习VB编程第14天,一个简单的排序代码把我难住了

    今天学习了刘金玉老师VB编程教程的第21期,学习的主要内容是冒泡排序算法. 一.算法的主要种类 1.算法的种类有冒泡排序法.选址排序法.折半查找法.快速排序法.穷举法等. 2.补充知识:variant ...

  6. python天勤金叉编程代码大全_这些Python编程黑科技,装逼指南,高逼格代码,让你惊叹不已...

    1.单行写一个评级组件 "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);定义一个变量rate是1到5的值,然后执行上面代码,看图 才发现插件什么的都 ...

  7. linux java 终端命令大全_在java中执行linux终端命令?

    我正在尝试从java执行SOX命令,但不幸的是它每次都返回一个错误.其他每个SOX命令都运行得很好!! 这是代码: class Simple { public static void main(Str ...

  8. python骂人代码大全_边看chromium的代码,边想骂人...

    这一年一直在看chromium for android的代码,边看边想骂,谷歌这帮人.. 一开始搞了个牛逼的架构,在安卓4.4上把以前android webkit团队的简单版替换掉了, 结果发现性能大 ...

  9. wordvba编程代码大全_这几本基础编程书籍一定要看

    程序员书库(ID:OpenSourceTop) 编译书单来自:https://simpleprogrammer.com/best-programming-books-2019/ 关于程序员类的技术书籍 ...

最新文章

  1. 残差网络的前世今生与原理 | 赠书
  2. python输出浮点数_Python的数据类型转换,那个很多人知道的知识,你知道吗?
  3. leetcode 1: 找出两个数相加等于给定数 two sum
  4. Visual Studio 2013开发 mini-filter driver step by step (1) - 创建 mini filter driver 工程
  5. 如何编写一份软件工程实验报告
  6. springcloud ribbon 配置负载均衡策略以及自定义策略
  7. vb6 设计模式 mscomm该部件的许可证信息没有找到_廊坊人脸识别系统报价,塔机黑匣子,供求信息...
  8. BZOJ 3224: Tyvj 1728 普通平衡树
  9. android中的 listview,Android中ListView的初步认识(一)
  10. 智能手机RAM和ROM的区别以及SD卡的作用
  11. ajax,training my javascript!手写AJAX,用POST方法传值
  12. php $path_info,PHP $_SERVER['PATH_INFO'] 无法获取到内容怎么办?
  13. 关于opencv标定的一些疑问,首先声明这篇文章转载于纸异兽,由于暂时联系不到他本人,只好请教各位了。有些问题想请教,各位大神可以留下联系方式帮我解决,万分感谢...
  14. PayPal美元和人民币之货币转换问题
  15. C语言——求n天后的日期
  16. 高斯投影坐标转换正算参数
  17. 服务器 z盘 映射,小脚本:在终端上映射网络驱动器Z盘
  18. 简单的视频剪辑入门制作软件,适合新手哦,快快收藏
  19. 毕业设计 单片机智能药箱系统 - STM32
  20. 阿里云windows服务器重置密码并连接远程桌面

热门文章

  1. 1.11 神经网络的权重初始化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授
  3. 2.4 程序示例--线性决策边界-机器学习笔记-斯坦福吴恩达教授
  4. STM32 基础系列教程 31 – DAC
  5. 内核启动流程分析(一)编译体验
  6. 降息大法好!银行4.35%消费贷了解一下?
  7. 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案
  8. 【SNN脉冲神经网络】SNN脉冲神经网络的工作原理演示MATLAB仿真带GUI界面
  9. 找出一堆数中最小的前K个数
  10. 关于plsql连接oracle数据库session失效时间设置