java架构篇之常量管理(接口定义法) 利用接口定义常量(架构师入门 初学)

在开发java代码的时候往往会遇到很多常量,可能会出现以下内容的代码

    switch (userType){
      case 1:
        //1是管理员
        //to do something
        break;
      case 2:
        //2是普通会员
        //to do something
        break;
      case 3:
        //3是游客
        //to do something
        break;
    }

判断用户的类型,不同的用户类型做不同的处理,这里面有注释,所以能看懂写的是什么,如果没有注释,你需要去看其他代码或者资料分清楚这个userType有几种类型,分表代表什么含义,严重降低开发效率,但这又是平时开发中是经常看到的。

下面跟着我一步一步提升代码质量

上面的示例代码中,在CheckStyle(这个东西写java的都应该要了解)规范中,这种写法也是会报Magic Number警告的,在此规范中,只有0和1等可以直接写数值,其他数值的定义都要提到类里面作为静态成员变量。类似于下面这样的代码

public class Codetest {

  private static final int ADMIN = 1;
  private static final int USER = 2;
  private static final int VISITOR = 3;

  public static void main(String[] args) {
    int userType = ADMIN;
    switch (userType) {
      case ADMIN:
        //to do something
        break;
      case USER:
        //to do something
        break;
      case VISITOR:
        //to do something
        break;
    }
  }
}

怎么样,这样即使没有注释,你是不是也能看懂一些了,对应英文翻译一下就知道常量代表的含义了,这样checkstyle也不会报MagicNumber 的警告了。

但是,要是不同的类都需要使用相同的变量的怎么办,相同的常量定义不可能每个类里面都定义一遍,那样重复代码太多,于是就把所有的常量集中在一起,单独定义一个常量类,于是便有了以下的代码

public class Constant {
  public static final int ADMIN = 1;
  public static final int USER = 2;
  public static final int VISITOR = 3;
}

这样,需要用常量的话使用这个类就好了

但是,代码依然可以进行优化,因为在这和类里面出现了大量的public static final的代码,我们可以通过其他方式,来避免大量这样的定义,这种方式,就是使用接口的方式。

public interface CodeConstant {

  /**
   * 用户类型
   */
  interface USER_TYPE{
    int ADMIN = 1;
    int USER = 2;
    int VISITOR = 3;
  }

  /**
   * 用户登录状态
   */
  interface USER_STATUS{
    int LOGIN = 1;
    int LOGOUT = 2;
  }
}

可以注意到,大量的public static final不见了

原理:在接口里面定义属性,会自动加上public static final

在我们用的时候,就可以这么调用了~~

import cn.infol.service.webclient.rest.CodeConstant.USER_TYPE;

public class Codetest {

  public static void main(String[] args) {
    int userType = USER_TYPE.USER;
    switch (userType) {
      case USER_TYPE.ADMIN:
        //to do something
        break;
      case USER_TYPE.USER:
        //to do something
        break;
      case USER_TYPE.VISITOR:
        //to do something
        break;
    }
  }
}

这种优点显而易见,可以很方便的定义常量,并且常量是可以分层次结构的

在应对一般的系统开发,这种常量的定义方法已经能够满足我们的需求了。

如果你的项目比较大,业务逻辑比较复杂,会对常量有些特殊操作,比如说:你需要找到这个USER_TYPE常量类别下有几种类型的常量,这时候,接口定义法不太适用了,可以参照我的下一篇 “java架构篇之常量管理(枚举定义法)”

架构观点:不一定越高级的方法越好,高级的方法在提高自己扩展性的同时,也会带来一定工作量,适用自己项目的方法才是最好的方法

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值