在java开发过程中,有很多同学,喜欢把一些常量写枚举类,于是代码里充斥了各种如下的枚举类:
public enum ShipOrderEnum implements IEnum { /** * 主表区域 */ BILL_TYPE("发货单", "BILL_TYPE", "", "6c4db816003911ea8eba73973c5f9d29"), SOURCE_BILL_TYPE("来源单据类型", "SOURCE_BILL_TYPE", "", "1dc36afdffcf11e98eba6df808af9ab8"), BILL_STATUS("生效", "BILL_STATUS", "", "3433acad004011ea8ebaef817a4fb296"), BILL_STATUS_CLOSE("关闭", "BILL_STATUS", "", "377ac160004011ea8ebab3a03decbd60"), COMPANY("公司", "COMPANY", "CG_COMPANY", ""), RECEIVE_ADDRESS("收货地址", "RECEIVE_ADDRESS", "CG_RECEIPT_ADDRESS_TITLE", "0f756841ff8011e98eba2d193701d607"), REC_ADDRESS_DETAIL("收货详细地址", "REC_ADDRESS_DETAIL", "CG_ADDRESS_DETAIL", ""), SUPPLIER("发货方", "SUPPLIER", "CG_SUPPLIER_TITLE", "36b59270fe3d11e9afbcfd5832a999da"), SUPPLIER_USER("发货用户", "SUPPLIER_USER", "CG_SUPPLIER_USER", ""), NEED_CONFIRM("否", "NEED_CONFIRM", "CG_CONFIRM_NEED", "6b8ff0809ebe11e88b7219c3aed96e32"), NOTE("备注", "NOTE", "CG_NOTE", ""), SUB_ORDER_OF_SUPPLIER("供应商子订单编号", "SUB_ORDER_OF_SUPPLIER", "", ""), SUB_ORDER_OF_MALL("商城子订单编号", "SUB_ORDER_OF_MALL", "", ""), AMOUNT("发货金额", "AMOUNT", "AMOUNT", "6e589eb2dd9f11e8b5a69590a14a4e34"), BUSINESS_TYPE("业务类型", "BUSINESS_TYPE", "CG_BUSINESS_TYPE", ""), E_ORDER("电商订单", "E_ORDER", "CG_EB", ""), /** * 子表区域 */ ROW_NUM("行号", "ROW_NUM", "", ""), LINE_SOURCE("来源类型", "LINE_SOURCE", "", "1dc36afdffcf11e98eba6df808af9ab8"), SOURCE_PO("来源订单", "SOURCE_PO", "", "82f60743004011ea8ebaa77a9461678d"), LINE_TPYE("明细类型", "LINE_TPYE", "CG_LINE_TPYE", ""), MATERIAL_CODE("物料编码", "MATERIAL_CODE", "CG_MATERIAL_CODE_TITLE", "8dd2ee63fefe11e98eba99b2c3325608"), MATERIAL_CLASS("采购类别", "MATERIAL_CLASS", "CG_CLASS", ""), MATERIAL_NAME("采购内容", "MATERIAL_NAME", "CG_MATERIAL_NAME", ""), MATERIAL_SPEC("规格型号", "MATERIAL_SPEC", "CG_MATERIAL_SPEC", ""), UNIT("计量单位", "UNIT", "CG_UNIT", ""), SHIP_QUANTITY("发货数量", "SHIP_QUANTITY", "", ""), LINE_NOTE("备注", "LINE_NOTE", "CG_LINE_NOTE", ""), PRICE_WO_TAX("不含税单价", "PRICE_WO_TAX", "CG_PRICE_WO_TAX", ""), PRICE_WI_TAX("含税单价", "PRICE_WI_TAX", "CG_PRICE_WI_TAX", ""), TAX_CODE("税率编码", "TAX_CODE", "CG_TAX_CODE", ""), TAX_RATE("税率", "TAX_RATE", "CG_TAX_RATE", ""), AMOUNT_WO_TAX("不含税金额", "AMOUNT_WO_TAX", "CG_AMOUNT_WO_TAX", ""), AMOUNT_WI_TAX("含税金额", "AMOUNT_WI_TAX", "CG_AMOUNT_WI_TAX", ""), TAX_AMOUNT("税额", "TAX_AMOUNT", "CG_TAX_AMOUNT", ""), QUAN_EXCECUTED("已执行数量", "QUAN_EXCECUTED", "CG_QUAN_EXCECUTED", ""), QUAN_UNEXCECUTED("未执行数量", "QUAN_UNEXCECUTED", "CG_QUAN_UNEXCECU", ""), QUAN_RECEIVED("已收货数量", "QUAN_RECEIVED", "CG_QUAN_RECEIVED", ""), LINE_STATUS("状态", "LINE_STATUS", "CG_LINE_STATUS", ""), CG_SETTLE_TYPE("结算类型", "CG_SETTLE_TYPE", "CG_SETTLE_TYPE", ""), CG_STATE_SPONSOR("对账发起方", "CG_STATE_SPONSOR", "CG_STATE_SPONSOR", ""), LINE_DETAIL("详情", "LINE_DETAIL", "", ""), MATERIAL_PIC("图片", "MATERIAL_PIC", "CG_ATTACHMENT", ""), CG_GOODS_ID("电商商品编码", "CG_GOODS_ID", "CG_GOODS_ID", ""), CG_GOODS_CODE("商品编码", "CG_GOODS_CODE", "CG_COMMODITY_CODE", ""), /** * 退货单 */ RETURN_TYPE("返件方式","RETURN_TYPE","RETURN_TYPE",""), SO_NUMBER("货运单号","SO_NUMBER","SO_NUMBER",""), DELIVERY_COMPANY("发货公司","DELIVERY_COMPANY","DELIVERY_COMPANY",""), FREIGHT_COST("派件运费","FREIGHT_COST","FREIGHT_COST",""), RETURN_TIME("运回时间","RETURN_TIME","RETURN_TIME",""), EB("电商订单","EB","EB",""), SERVICE_TYPE("服务类型", "SERVICE_TYPE", "SERVICE_TYPE", ""), CG_EMALL_RETURN_NO("商城退货编号","CG_EMALL_RETURN_NO","CG_EMALL_RETURN_NO",""), PLATFORM_RETURN_NO("平台退货单编号","HUBAFSSN","HUBAFSSN",""), SOURCED_PO_LINE("来源收货明细", "SOURCED_PO_LINE", "SOURCED_PO_LINE", ""), /** * 接收单 */ CG_EB_NO("商城订单号", "CG_EB_NO", "CG_EB_NO", ""), CG_EB("电商订单", "CG_EB", "CG_EB", ""), SOURCE_SO_LINE("来源接收明细", "SOURCE_SO_LINE", "SOURCE_SO_LINE", ""), ; private String title; private String column; private String cg_column; private String id; ShipOrderEnum(String title, String column, String cg_column, String id){ this.title = title; this.column = column; this.cg_column = cg_column; this.id = id; } @Override public String getTitle() { return title; } public String getColumn() { return column; } public String getCg_column() { return cg_column; } public String getId() { return id; } public String gerCurrencyId(){ return cg_column + ShipOrderConstant.CURRENCY_ID; }
由于开发人员可能有多个人开发相似的功能,于是重复的枚举值充斥在各种类里。还是美其名曰我声明了枚举值啊。在我看来,上面的枚举类就是死的,贫血的枚举类,难道还有活的,充血的枚举类吗?请看下文:
如果了解设计模式的人员,就知道这里实现了两种模式:单例+策略:枚举类是单例的,方法是每个枚举类的行为。但是这种方式有一个缺陷,只能有一个抽象方法,但是已经满足策略模式。对于想实现策略模式是另一种更好的选择:可以减少大量的策略类,不用写策略模式单例的入口了