EffectiveJava-用私有构造器或者枚举强化Singleton属性

单例模式是常见的设计模式之一,很多框架或业务实现都会用到。单例顾名思义就是单个实例,在设计模式中,单利通常有两种实现方式:懒汉式和饿汉式

//饿汉式单利
public class Singletion1 {

    private static final Singletion1 instance = new Singletion1();

    private Singletion1(){}

    public static Singletion1 getInstance(){
        return instance;
    }
}


//懒汉式单利
public class Singletion2 {

    private static Singletion2 instance;
    public Singletion2(){}

    public static Singletion2 getInstance(){
        if(instance == null){
            synchronized(Singletion2.class){
                if(instance == null){
                    instance = new Singletion2();
                }
            }
        }
        return instance;
    }
}

在Java中,实例化一个类的入口是构造器,上面两种实现方式有一个重要的共同点就是将构造器私有化,这样就屏蔽了外界对类的实例化权限(反射暴力实例化不在此处讨论),只有在类内部才能创建该类的实例,这样就增强或者说实现了单例的必要条件。


JDK1.5引入了枚举类型,利用含有单个元素的枚举来实现单例已经成为实现单例的最佳方法

//枚举单例
public enum Singletion3 {

    INSTANCE;

    public static Singletion3 getInstance(){
        return INSTANCE;
    }
}

利用枚举实现的单例,在写法上更简洁,在实现上更安全。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值