枚举单例模式

Java中的枚举类非常强大的。之前看过单例的许多实现,对于枚举的单例略有了解,但理解不够深刻,最近结合实例研究了一下,感觉枚举是很强大且非常好用。

首先看一个最简单的枚举单例模式:
public enum  TestEnum {
    TEST_ENUM;
}
其中TEST_ENUM,即为TestEnum类的唯一实例。这样写可能一眼看去,没什么意义。也不是很好理解。下面以生成一个单例的CGLib动态代理类作为场景进行总结。先放代码:

代理类

import java.lang.reflect.Method;

public enum CGLibProxyEnum implements MethodInterceptor {
    CG_LIB_PROXY_ENUM;

    public <T> T getProxy(Class<T> cls) {
        return (T)Enhancer.create(cls, this);
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        return methodProxy.invokeSuper(o, objects);
    }
}

测试类

class Hello {
    public void sayHello() {
        System.out.println("Hello, new Boys");
    }
}
public class Test {
    public static void main(String[] args) {
        Hello helloProxy = CGLibProxyEnum.CG_LIB_PROXY_ENUM.getProxy(Hello.class);
        helloProxy.sayHello();
   }
}
测试结果打印:Hello, new Boys

上面的CGLibProxyEnum枚举类实现了MethodInterceptor接口,并重写了其中的intercept方法。在其内部创建了唯一的实例CG_LIB_PROXY_ENUM;这是由其默认的私有的构造器创建的。
这里可以看出,枚举单例模式非常简单,易于实现,且类型安全。而且有着和普通类一样的基本功能。并且枚举类默认final修饰,不允许被继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值