重构36计(2)

原文地址:http://www.cnblogs.com/west-link/archive/2012/04/16/2446951.html

第七计:串联函数调用

当一个类的大部分函数被较为频繁地调用,并且包含连续性地调用,那么可以考虑为这个类中那些没有返回值的函数增加返回值,即返回对象本身,这样就可以串联函数调用,使用起来较为方便,举个例子:

// 表示用户的类
public class User{
  public void setName(String name);
  public void setAge(int age);
  public void setPhoneNumber(int phoneNumber);
}

下面是不使用串联函数调用的情况:

User user = new User();
user.setName("West_Link");
user.setAge(3);
user.setPhoneNumber(122333);

下面是使用串联函数调用的情况:

User user = new User().setName("West_Link").setAge(3).setPhoneNumber(123333);

只需要为那些函数增加一个User对象的返回值即可,如下:

public User setName(String name){
   this.name = name;
   return this;
}

第八计:临时变量在用到时才声明

很多人喜欢在函数的开头把所有要用到的临时变量都声明了,我认为这种方式有以下几个缺点:

1、不利于代码的阅读,需要经常在变量的使用处和变量的声明处跳转,不方便。
2、容易造成资源的浪费,因为有些对象的初始化是比较耗费资源的,而函数可能在用到该对象之前返回。
3、不利于函数的拆分。
所以,我们应该尽可能降低临时变量的作用域,那样它能“捣乱“的范围就被缩至最小了。

第九计:保持类的公有函数粒度最小化

一个类的公有函数不应该过多,那样会使类变得臃肿、不易使用,我认为最佳状态是绝大部分公有函数不能被拆分,也就是说,不存在那些通过其他公有函数也能达到目的的函数,例如下面的类:

复制代码
public class StringArray{
  // 获取数组的大小
  public int getSize();
  // 判断数组是否为空
  public boolean isEmpty();
  // 将数据添加到数组的某个索引
  public void add(String value,int index);
  // 将数据添加到数组的末尾
  public void addToLast(String value);
  // 将数据添加到数组的起始位置
  public void addToFirst(String value);
}
复制代码

StringArray其实只需要两个公有函数即可,即getSize和add,因为isEmpty可以通过getSize来达到相同的目的:getSize() == 0。类似地,addToLast、addToFirst也可以通过add来实现。不过,如果类的公有函数比较少,而且类似isEmpty类似的需求经常被用到,那么保留这些公有函数还是值得的。

第十计:将可访问性降至最低

面向对象中的封装性使得我们可以隐藏类或者接口的实现细节,所以,为了让程序更易维护、接口或者类的使用更加简单,我们应该尽可能降低成员变量或者成员函数的可访问性,辅助函数一定要声明为私有的,确保只将接口函数声明为公有的,如果该辅助函数可能会被子类用到,则可以声明为保护的。辅助类也应声明为私有的,对于成员变量则一定要声明为私有的,只提供必要的set或者get函数。总之,当我们增加新的类、成员变量、成员函数时,一定要合理地设置可访问性,暴露给外界的越少越好。

第十一计:合并条件减少嵌套

条件判定如果嵌套的太多会大大降低程序的可读性,很容易滋生Bug,例如:

复制代码
if(a){
  if(b || c){
      if(d){
          ...
       }
   }
}
复制代码

可以合并成:

if(a && (b || c) && d){
     ...
}

第十二计:循环中早用continue减少条件嵌套

除了通过合并条件来减少嵌套层次外,在for或者while循环中,可以用continue来减少条件嵌套,例如:

复制代码
for(int i=0; i<100;i++){
   if(a){
      if(b){
          if(c){
               ...
          }
       }
    }
}
复制代码

这段代码的嵌套深度是4,使用continue可以大大减少嵌套层次:

复制代码
for(int i=0; i<100;i++){
  if(!a)
     continue;
  if(!b)
     continue;
  if(!c)
     continue;
   ...
}
复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值