A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenyihan 初级黑马   /  2016-9-19 12:11  /  494 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例设计模式作用,实现方式以及区别  是什么啊啊

1 个回复

倒序浏览
Java中的五种单例模式实现方法
* @author lei
* 单例模式的五种写法:
* 1、懒汉
* 2、恶汉
* 3、静态内部类
* 4、枚举
* 5、双重校验锁
*/
/**
*五、 双重校验锁,在当前的内存模型中无效
*/
class LockSingleton{
    private volatile static LockSingleton singleton;
    private LockSingleton(){}
   
    public static LockSingleton getInstance(){
        if(singleton==null){
            synchronized(LockSingleton.class){
                if(singleton==null){
                    singleton=new LockSingleton();
                }
            }
        }
        return singleton;
    }
     
}
/**
* 四、枚举,《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
*/
enum EnumSingleton{
    INSTANCE;
    public void doSomeThing(){
    }
}
/**
* 三、静态内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading
*/
class InternalSingleton{
    private static class SingletonHolder{
        private final static  InternalSingleton INSTANCE=new InternalSingleton();
    }   
    private InternalSingleton(){}
    public static InternalSingleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
}
/**
* 二、恶汉,缺点:没有达到lazy loading的效果
*/
class HungrySingleton{
    private static HungrySingleton singleton=new HungrySingleton();
    private HungrySingleton(){}
    public static HungrySingleton getInstance(){
        return singleton;
    }
}
/**
* 一、懒汉,常用的写法
*/
class LazySingleton{
    private static LazySingleton singleton;
    private LazySingleton(){
    }
    public static LazySingleton getInstance(){
        if(singleton==null){
            singleton=new LazySingleton();
        }
        return singleton;
    }   
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马