Singleton Pattern

Singleton pattern is to make sure only 1 instance is created through entire project, it's applicable when object creation is complicated but 1 instance is enough, like tool class, property object or session, it can help avoid space waste.

In total there are 8 ways to implement it, 3 ways are recommanded.

Way1:

Hungry loading mode, it's only applicable for single thread and always create and only create one instance, even the entire project doesn't request to create any.

private Singleton(){}
private final static Singleton instance = new Singleton();
public static Singleton getInstance(){
    return instance;
}

Way2: (recommanded)

Lazy loading mode, double comparation way. Applicable for multithreading and safe. Mention key word "volatile" because create new instance part is not atomic operation, actually in operation system, it will be completed in 3 steps,

  1. Create new memory space
  2. Create new object instance
  3. New object instance points to new created space

However if there's 2 threads comes to this part, thread A is using 132 steps (it may happen) to create new object instance and it's running at step3 now, at same time thread B comes to this part and program will tell thread B new instance is created and return it to thread B, but because step2 is not completed, thus, thread B will get a empty space. Add "volatile" key word, we can avoid to face this issue.

But this way can be destoyed by reflection mechanism, it's only performed on purpose, normally no need to consider on it.

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

Way3: (recommanded)

Enum class

Like enum class to return data dictionary, singleton instance has only one status hence always return same object.

The only weekness is it's hungry loading mode, program always contains one instance.

enum Singleton{
    INSTANCE;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值