多种单例模式

//1 懒汉,线程不安全
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null ) {
            instance = new Singleton();
        }

        return instance;
    }
}

//2 懒汉,线程安全
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}

    public static synchronized Singleton getInstance(){
        if(instance == null ) {
            instance = new Singleton();
        }

        return instance;
    }
}

//3 饿汉
public class Singleton {
    private static Singleton instance = new Singleton();
    private Singleton(){}

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

//4 静态内部类
public class Singleton {
    private static class SingletonHolder {
        public static Singleton instance = new Singleton();
    }
    private Singleton(){}

    public static Singleton getInstance(){
        return Singleton.SingletonHolder.instance;
    }
}

//5 枚举
public class Singleton {

    private Singleton(){}

    public static Singleton getInstance(){
        return Single.instance.getInstance();
    }

    private static enum Single {
        instance;

        private  Singleton single;
        //JVM会保证此方法绝对只调用一次
        private Single(){
            single = new Singleton();
        }

        public Singleton getInstance(){
            return single;
        }
    }
}

//6 双重校验锁
public class Singleton {

    private static volatile Singleton instance = null;
    private Singleton(){}

    private static Singleton getInstance() {
        if(instance == null) {
            synchronized (Singleton.class) {
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
时间: 2024-10-29 04:10:11

多种单例模式的相关文章

Objective-C中单例模式的实现-备

单例模式在Cocoa和Cocoa Touch中非常常见.比如这两个,[UIApplication sharedApplication]和[NSApplication sharedApplication],大家应该都见过.但是我们应该如何在代码中实现一个单例模式呢? 如果你对苹果的文档很熟悉的话,你一定知道,在Cocoa Foundamentals Guide中有一段实现单例模式的示例代码.大致如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

ios单例模式详解

http://blog.csdn.net/a451493485/article/details/8624990 C代码   @implementation AppShareDataManager static AppShareDataManager * shareDataManager = nil; @synthesize theCurrentLanguage; @synthesize presentModalFlag; .......... +(AppShareDataManager *) s

Android设计模式之单例模式的七种写法

一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式的实现. 事实上常常使用的图片载入框架ImageLoader的实例创建就是使用了单例模式.由于这个ImageLoader中含有线程池.缓存系统.网络请求,非常消耗资源,不应该创建多个对象,这时候就须要用到单例模式. ImageLoader的创建代码例如以下: ImageLoader.getInsta

单例模式的多种实现

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.当一个类的实例有且只可以有一个的时候就需要用到单例模式了.为什么只需要有一个呢?有人说是为了节约内存,但这只是单例模式带来的一个好处.只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由.我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候.比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢? Singleton模式主要作用是保证

单例模式的多种实现及优缺点比较

Head First一书中对单例模式的定义是:单例模式确保一个类只有一个实例,并提供一个全局访问点. 在很多实际场景应用中,我们希望某个类只能有一个实例化的对象,例如数据连接池,日志对象等等,这个时候我们就要使用单例模式了,单例模式的核心思想是私有化构造器,防止其他类任意实例化该类,具体的实现有多种,每种都会有其优缺点,让我们来仔细看看各种实现的差异吧. 依据我写代码的习惯,先上UML类图,我用的工具是StarUML,免费不需要破解哦:) 第一种实现: public class MyClass

单例模式,多种实现方式JAVA

转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): Java代码 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } retu

单例模式在多线程下的多种实现模式

单例模式是23种设计模式中比较常见的设计模式,又因为其代码量精简,所以经常会被用在在面试中测试面试者的能力. 初级的单例模式很简单 实现两个要求 1构造方法私有化 2对外提供静态的,公开的获取对象的方法 所以:初级单例模式如下 public class Singelton {private Singelton(){} private static Singelton sin=null;public static Singelton getSingelton(){           if(sin

C#单例模式的多种写法

它的主要特点不是根据客户程序调用生成一个新的实例,而是控制某个类型的实例数量-唯一一个.(<设计模式-基于C#的工程化实现及扩展>,王翔).也就是说,单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题. public class Singleton { private static Singleton instance; private Singleton() {

Java单例模式 多种实现方式

一:通过静态私有成员实现单例模式 (1):私有化构造函数 (2):new静态实例属性对象,加锁. 单例类: package SinglePag; /* * 构造函数私有化,结合锁+静态的概念 实现单例模式 */ public class SingleDemo { //防止类的实例化 private SingleDemo(){ } //静态 实例 属性 private static SingleDemo singleD; //获取对象实例 (单例的方式 ),锁住当前类(加锁) public syn