利用枚举解决java反射对单例的破坏

定义枚举:

enum Type{
    A{
        public String getType() {
            return "A";
        }
    },B {
        @Override
        public String getType() {
            return "B";
        }
    },C {
        @Override
        public String getType() {
            return "C";
        }
    },D {
        @Override
        public String getType() {
            return "D";
        }
    };

    public abstract String getType();
}

枚举可以重写getType()方法,可以根据各个枚举自己的业务重写该方法。

下面贴出本人的代码:

工具类:

public class ToLowerOperation implements IOperation {

    public static final Logger LOG = LoggerFactory.getLogger(ToLowerOperation.class);

    public static volatile ToLowerOperation addOperation = null;

    public ToLowerOperation() {
    }

    public static IOperation newInstance(){
        if(addOperation == null){
            synchronized (ToLowerOperation.class){
                if(addOperation == null){
                    addOperation = new ToLowerOperation();
                }
            }
        }
        return addOperation;
    }

    @Override
    public String getData(String[] values, Object condition) {
        String returnValue = "";
        if(values != null){
           returnValue = values[0].toLowerCase();
        }
        return returnValue;
    }

}

工具类中重写接口方法,并定义单例模式。

枚举类:

public enum OperationEnums {
    //字典对照
    DictTypeOperationEnum() {
        @Override
        public IOperation getInstance() {
            operation = DictTypeOperation.newInstance();
            return operation;
        }
    },
    //全部转小写操作
    ToLowerOperationEnum() {
        @Override
        public IOperation getInstance() {
            operation = ToLowerOperation.newInstance();
            return operation;
        }
    };


    public IOperation operation;

    public IOperation OperationEnum() {
        return operation;
    }

    /**
     * 定义获取各个操作类实例
     * @return
     */
    public abstract IOperation getInstance();

    public IOperation getOperation() {
        return operation;
    }

    public void setOperation(IOperation operation) {
        this.operation = operation;
    }
}

本人实现的功能就是用枚举管理各个工具类,也可以将各个工具类的逻辑写在枚举中。

枚举实现同一接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值