10 个最好用的重构小技巧排行榜,你用过哪些?
Java之间
共 7657字,需浏览 16分钟
·
2021-01-13 03:46
1、浅谈用不好缓存的几个受伤场景! 2、高并发下接口幂等性解决方案 3、给代码写注释时有哪些讲究? 4、我用Redis实现了一个轻量级的搜索引擎! 5、加强版Redis,又一款国产高性能KV存储数据库开源了! 来源:https://blog.51cto.com/14230003/2478426
No.1:重复代码的提炼
小实例
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("重复代码");/* 重复代码块 */
}
}
No.2:冗长方法的分割
小实例
class BadExample {
public void someMethod(){
//function[1]
//function[2]
//function[3]
}
}
/* ---------------------分割线---------------------- */
class GoodExample {
public void someMethod(){
function1();
function2();
function3();
}
private void function1(){
//function[1]
}
private void function2(){
//function[2]
}
private void function3(){
//function[3]
}
}
No.3:嵌套条件分支的优化(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]
}
}
No.4:嵌套条件分支的优化(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
}
}
}
No.5:去掉一次性的临时变量
小实例
class BadExample {
private int i;
public int someMethod(){
int temp = getVariable();
return temp * 100;
}
public int getVariable(){
return i;
}
}
/* ---------------------分割线---------------------- */
class GoodExample {
private int i;
public int someMethod(){
return getVariable() * 100;
}
public int getVariable(){
return i;
}
}
No.6:消除过长参数列表
小实例
class BadExample {
public void someMethod(int i,int j,int k,int l,int m,int n){
//code
}
}
/* ---------------------分割线---------------------- */
class GoodExample {
public void someMethod(Data data){
//code
}
}
class Data{
private int i;
private int j;
private int k;
private int l;
private int m;
private int n;
//getter&&setter
}
No.7:提取类或继承体系中的常量
小实例
class BadExample {
public void someMethod1(){
send("您的操作已成功!");
}
public void someMethod2(){
send("您的操作已成功!");
}
public void someMethod3(){
send("您的操作已成功!");
}
private void send(String message){
//code
}
}
/* ---------------------分割线---------------------- */
class GoodExample {
protected static final String SUCCESS_MESSAGE = "您的操作已成功!";
public void someMethod1(){
send(SUCCESS_MESSAGE);
}
public void someMethod2(){
send(SUCCESS_MESSAGE);
}
public void someMethod3(){
send(SUCCESS_MESSAGE);
}
private void send(String message){
//code
}
}
No.8:让类提供应该提供的方法
小实例
class BadExample {
public int someMethod(Data data){
int i = data.getI();
int j = data.getJ();
int k = data.getK();
return i * j * k;
}
public static class Data{
private int i;
private int j;
private int k;
public Data(int i, int j, int k) {
super();
this.i = i;
this.j = j;
this.k = k;
}
public int getI() {
return i;
}
public int getJ() {
return j;
}
public int getK() {
return k;
}
}
}
/* ---------------------分割线---------------------- */
class GoodExample {
public int someMethod(Data data){
return data.getResult();
}
public static class Data{
private int i;
private int j;
private int k;
public Data(int i, int j, int k) {
super();
this.i = i;
this.j = j;
this.k = k;
}
public int getI() {
return i;
}
public int getJ() {
return j;
}
public int getK() {
return k;
}
public int getResult(){
return i * j * k;
}
}
}
No.9:拆分冗长的类
No.10:提取继承体系中重复的属性与方法到父类
结束语
最近热文阅读:
1、浅谈用不好缓存的几个受伤场景! 2、高并发下接口幂等性解决方案 3、给代码写注释时有哪些讲究? 4、我用Redis实现了一个轻量级的搜索引擎! 5、加强版Redis,又一款国产高性能KV存储数据库开源了! 6、如何使用 Arthas 定位 Spring Boot 接口超时 7、石锤!Github 买 star 行为 8、那些总是写“烂代码”的同学,强烈推荐你用这款IDEA插件! 9、IDEA 15款神级良心插件强烈推荐收藏 10、卧槽!新来的妹纸rm -rf把公司整个数据库删没了,整个项目组慌了~ 关注公众号,你想要的Java都在这里
评论