zoukankan      html  css  js  c++  java
  • 利用枚举进行状态的设计

    在上一家公司的时候,发像一个很不好的地方,那就是一个实体的状态使用int来表示。个人觉的主要有以下一些缺点。
    枚举的优点:
    1、虽然int是C#中的强类型,但int不是业务逻辑的强类型,但枚举可以实现业务逻辑的强类型。
          比如说一个订单的状态{新单,付款、配送、完成}如果使用枚举的话,那么就能确定它能安全的表示这些状态,而如果直接使用数字就可能导致这个数字不能正确的表示这些状态。
    2、程序代码的可读性变差,别人在阅读或修改的时候要不断的看着那一段对于数字的解释说明。
          状态.新单 应该要比 0 来的容易理解
          if(status==OrderStatus.Finnish) 要比 if(status=3)来的容易理解吧。。。
    3、状态不能进行组合,使的状态变的非常多。
         比如一条需要审批的记录,它的审批结果有(通过拒绝),然后需要审批的A级、B级、C级、D级、E级
         使用数字来表示需要 2*5=10种。而使用枚举状态来则需要2+5=7种,而且可以进行运算。
    \\……其他的以后想到在补充·····


    枚举的运算:

    枚举可以和int进行相互转换,所以枚举的预算实际上就是int的位运算。

    枚举的或运算(  |  ):以前学c的时候被老师骗的好惨啊,把一个个数字进行分解成2进制,然后在纸上对齐再一位一位的进行或运算。然后再反算成十进制的数字。其实还有一些窍门,大家都学过集合吧,我们可以把一个数字看成是以2^n(n>=0)为元素的集合。比如说7={1,2,4}
    21={16+4+1}这样转换为2进制也很容易21就是(10101)。大家理解了上面就很容易计算数字的或运算了。或预算实际上就是我们集合中的并(∪)运算、或运算。比如:7 | 21={16,4,2,1}=23 ,如果是2^n(n>=0)那就更容易算了,就是将这两个数相加。如 128|64=128+64=192

    枚举的与预算( & ):枚举的与运算实际上就是数学集合中的交(与)(∩)。如21&7={1,4}=5,128&64={}=0

    枚举的异或运算( ^ ):枚举的异或操作实际上是 交集的非   (并集-交集) 。如 21^7={16,2}=18 简单点就是(21|7)-(21&7)=18


    枚举运算的运用:
    比如一条需要审批的记录,它的审批结果有(通过拒绝),然后需要审批的A级、B级、C级、D级、E级
    现在要表示C级拒绝就:Status.拒绝|Status.C
    如何查找D级通过就是 Status&(Status.Allow|Status.C)==(Status.Allow|Status.C)
  • 相关阅读:
    Java面试不得不知的程序(二)
    Java面试不得不知的问题(一)
    Java框架 面试题总结
    JavaSE 面试题总结
    JavaEE 面试题总结
    DBUtils 学习使用
    JavaWeb —— JSP 总结
    java 单例模式(singleton)
    java 上溯造型与下塑造型
    java 第六章 面向对象基础
  • 原文地址:https://www.cnblogs.com/Linjianyu/p/1204355.html
Copyright © 2011-2022 走看看