单例的三种实现方式

1双重加锁模式

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

    private Singleton(){

    }
}

2静态内部类

public class Singleton {
    private Singleton(){

    }

    public Singleton getSingleton(){
        return SingletonInner.singleton;
    }
    private static class SingletonInner{
        protected  static Singleton singleton = new Singleton();

    }
}

3枚举

public enum Singleton {
    Singlton;
    private Singleton(){

    }
}

由于java提供了反射机制,第一种和第二种方式通过反射机制仍然有可能生成多个实例

时间: 2024-12-30 07:20:08

单例的三种实现方式的相关文章

单例的几种写作方式和序列化

2015-09-02 16:02:07 推荐一篇大神的文章,好久之前就看过这篇文章,而且本文的思路就来自这篇文章~其实有了大牛的文章,本文可写可不写,但是为了给自己总结一下,就写了~ http://callmegod.iteye.com/blog/1474441 单例的作用想必大家都知道,也一直在用,但是到底怎样的单例是“比较”完美的单例模式呢?我也不知道,但是我一直在寻找答案~ 下面我简单总结一下单例吧,否则太乱了 Part 1:单例的几种实现方式 1. 恶汉式:指在类加载或者被初始化的时候,

浅谈单例的三种实现--C#

传统的double check : public sealed class Singleton { private static Singleton instance = null; private static readonly object padlock = new object(); Singleton() { } public static Singleton Instance { get { if (instance == null) { lock (padlock) { if (i

单例的2种使用方式

一直都对设计模式,限于书本的理论知识,今天终于用到了众多设计模式中的一种,单例模式. 一共有2种使用方法.第一种是用它里面的函数,第二种是用它里面的变量. 上代码: 第一种,用里面的函数. 单例.h @interface NetManager : NSObject + (id)sharedManager; -(void)firstPrintf; -(void)secondPrintf; -(void)threeprintf; -(void)fourprintf; @end 单例.m static

IOS单例的两种实现方式

单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种). 根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的dispatch_once函数. [email protected]synchronized 实现 static InstanceClass *instance; + (InstanceClass *)defaultInstance{ @synchronized (self){ if (instance == ni

Swift定义单例的三种方式

第一种:使用GCD. 自定义一个class继承你要继承的类, 定义一个静态可选变量, 声明一个dispatch_once_t,并赋初始值0(0代表还没有被实例过, 如果被实例过了其值始终是1),剩下的和OC定义单例类似 1 class NetWorkTools: AFHTTPSessionManager { 2 3 //MARK: - 单例 4 static var instance: NetWorkTools? 5 static var once_t: dispatch_once_t = 0

iOS开发之——单例的几种设计方式

单例是ios开发中常用的一种设计模式,通常用来控制器之间传值.方便.高效,全局通用. 单例模式的设计分为ARC和MRC. ARC: 方式一 1.创建一个继承自NSObject的类. 2.在这个类的.h文件中声明类方法: + (instancetype)sharedInstance; 2.在这个类的.m文件中实现以下方法: static id instance; + (instancetype)sharedInstance { static dispatch_once_t onceToken; d

单例的三种模式

//第一种形式:懒汉式,也是常用的形式.  public class SingletonClass  {        private static SingletonClass instance=null;   public static synchronized SingletonClass getInstance()   {             if(instance==null)             {instance=new SingletonClass();}    retu

iOS中创建单例的两种方式

刚刚开始做iOS开发的时候,不知道怎么创建单例,在网上搜的也大多数都不太全,所以总结了一下创建单例的两种方式 首先在.h文件中声明类方法 1 +(instancetype)sharedUtils; 然后在.m文件中实现它,实现的方法有两种 第一种,在创建一个对象时先判断在程序中有没有创建过这个对象 1 static PublicUtils *DefaultManager = nil; 2 3 +(instancetype)sharedUtils 4 { 5 if (!DefaultManager

java单例设计模式八种方式

单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象.SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这是就会使用到单例模式. 单例设计模式八种方式 单例模式有八种方式: 饿汉式( ( 静态常 量) ) 饿汉式(静态