【大话设计模式之——单例模式(Singleton pattern)】

常见的五种单例模式实现方式及其特点
– 主要:
. 饿汉式(线程安全,调用效率高。 但是,不能延时加载。)
. 懒汉式(线程安全,调用效率不高。 但是,可以延时加载。)
– 其他:
. 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题。不建议使用)
. 静态内部类式(线程安全,调用效率高。 但是,可以延时加载)
. 枚举式(线程安全,调用效率高,不能延时加载。并且可以天然的防止反射和反序列
化漏洞!)
. 如何选用?
– 单例对象 占用 资源 少,不需要 延时加载:
. 枚举式 好于 饿汉式
– 单例对象 占用 资源 大,需要 延时加载:
. 静态内部类式 好于 懒汉式

      单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。

饿汉式:

public class Singleton {
    private static /*final*/ Singleton s = new Singleton();
    private Singleton(){} //私有化构造器
    public static /*synchronized*/ Singleton getInstance(){
        return s;
    }
}

懒汉式:

public class Singleton {
    private static Singleton s;
    private SingletonDemo01(){} //私有化构造器
    public static synchronized Singleton getInstance(){
        if(s==null){
            s = new Singleton();
        }
        return s;
    }
}

双重检测锁:

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

静态内部类方法:

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

枚举模式:

public enum SingletonDemo05 {
    /**
    * 定义一个枚举的元素,它就代表了Singleton的一个实例。
    */
    INSTANCE;
    /**
    * 单例可以有自己的操作
    */
    public void singletonOperation(){
    //功能处理
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值