code bad smell

重构标准格式

名称 (name) 。建造一个重构词汇表,名称是很重要的。
简短概要 (summary) 。简单介绍此一重构手法的适用情景以及它所做的事情。这部分可以帮助你更快找到你所需要的重构手法。
动机 (motivation)   介绍“为什么需要这个重构”和“什么情况下不该使用这个重构”
做法 (mechanics) 简明扼要地一步一步介绍如何进行此一重构
范例 (examples) 以一个十分简单的例子说明此重构手法如何运作

什么时候可以对代码进行重构   

1. 重复代码
最简单的就是具有重复的表达式
两个兄弟子类具有相同的表达式
这时候就需要将子类之间相同的部分分割出来,然后形成一个独立的函数供调用
两个或多个不相关的类
不相干的类出现相同代码
在一个类中分出来做成函数,然后供其他类调用,在这个时候就需要调整函数的位置
2.switch case
Switch 在很多情况下的确很方便,但是在使用 switch case 的时候不免会出现大量的语句重复,如果要添加新的 case 语句的话,就需要找到所有的 switch 语句对其进行修改,就违反了开闭原则( OCP
OCP 一个软件实体,如类,模块和函数应该对扩展开放,对修改关闭
所以我们可以用多态来处理 switch 语句
1. 抽象每个 Switch 类型码 ,做成一个抽象类,抽象方法为 case 的执行的函数
2. 每个 case ,作为一个子类,实现抽象类,并实现其抽象方法,方法就内容就是 case 的内容
3. 使用使用子类来代替类型码,执行 case 的语句

 

3. 过长的函数
一个过长的函数经常会让人难以理解这是干什么的,需要不断的去转换上下文去看子程序干了什么。
所以我们应该积极的分解函数。
1 )见名知意:只要函数名可以解释其用途,就可以修改他的名字
2 )注释:        注释可以指出代码的用途和实现手法,在此情况下可以将其转换                为函数,并且在注释的基础上我们还可以给函数命名。
3 )循环:        通常情况下条件表达式和循环都是可以提炼函数的信号。

 

提炼函数 

// 修改前
void printOwing ( double amount){
   
printBanner () ;

   
//print details
       
System.out.println ( "name:" + _name) ;
       
System.out.println ( "amount:" + _amount) ;
   
}

 

//修改后

void printOwing(double amount){
   
printBanner();
   
printDetailes(amount);
}

void printDetailes(double amount){
       
System.out.println("name:" + _name);
       
System.out.println("amount:" + _amount);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值