码迷,mamicode.com
首页 > 编程语言 > 详细

设计模式之单例模式(Java实现)

时间:2018-06-24 00:40:28      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:final   TE   饿汉式   nbsp   IV   静态方法   推荐   java   ret   

单例模式分为饿汉式和懒汉式,单例类的特点是:确保一个类只能实现一个实例,自行实例化并向整个系统提供这一实例。

饿汉式就是当类加载的时候,已经自行实例化了,线程安全;

饿汉式的代码如下:

public class EHanSignle {
    //私有静态类变量
    private static final EHanSignle eHanSignle = new EHanSignle();
    
    //私有构造方法,只能在类的内部实例化
    private EHanSignle() {}
    
    //公有静态方法。供类调用
    public static EHanSignle getInstance() {
        return eHanSignle;
    }
}

 

懒汉式就是第一次实例化的时候,才调用方法实例化自己

懒汉式代码(线程不安全)如下所示

public class LHanSignle {
    private static LHanSignle lHanSignle = null;
    private LHanSignle() {}
    
    public static LHanSignle getInstance() {
        if(lHanSignle == null) {
            lHanSignle = new LHanSignle(); 
        }
        return lHanSignle;
    }
}

为了实现线程安全有三种方法:

第一种就是在getInstance的方法上加同步;

public class LHanSignle {
    private static LHanSignle lHanSignle = null;
    private LHanSignle() {}
    
    public static synchronized LHanSignle getInstance() {
        if(lHanSignle == null) {
            lHanSignle = new LHanSignle(); 
        }
        return lHanSignle;
    }
}

第二种就是双重检查锁定

public class LHanSignle {
    private static LHanSignle lHanSignle = null;
    private LHanSignle() {}
    
    public static LHanSignle getInstance() {  
        if (lHanSignle == null) {    
            synchronized (LHanSignle.class) {    
               if (lHanSignle == null) {    
                  lHanSignle = new LHanSignle();   
               }    
            }    
        }    
        return lHanSignle;   
    }  
}

第三种方法就是静态内部类(推荐):

public class LHanSignle {
    private static class loadClass{
        private static final LHanSignle lHanSignal = new LHanSignle();
    }
    private LHanSignle() {}
    
    public static LHanSignle getInstance() {  
        return loadClass.lHanSignal; 
    }  
}

 

设计模式之单例模式(Java实现)

标签:final   TE   饿汉式   nbsp   IV   静态方法   推荐   java   ret   

原文地址:https://www.cnblogs.com/1214045596js/p/9219092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!