创建型设计-单例模式

Posted 秋天de枫叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型设计-单例模式相关的知识,希望对你有一定的参考价值。

声明一下:本文的文字多数文字都是来自网上,只有例子是自己写的。因为自我感觉还没有能力能够系统的解释一个模式,已经有现成的比较完善的说明,就不重复造轮子哈。

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例(双重检查)三种。
  单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

单例的类图非常简单:

例子:

懒汉式(线程不安全):

 /**
     * 懒汉式(线程不安全的)
     */
    private  static Singleton singleton;
    private Singleton()
    public static  Singleton getInstance()
        if(singleton==null)
            singleton=new Singleton();
        
        return singleton ;
    
懒汉式(线程安全):

/**
     * 懒汉式(线程安全)
     */
    private  static Singleton singleton;
    private Singleton()
    public static synchronized Singleton getInstance()
        if(singleton==null)
            singleton=new Singleton();
        
        return singleton ;
    


饿汉式:
 /**
     * 饿汉式
     */
    private static Singleton instance = new Singleton();
    private Singleton ()
    
    public static Singleton getInstance() 
        return instance;
    

双重检查:(线程安全)
    private static Singleton singleton;
    private Singleton()
    public static Singleton getInstance()
        if(singleton==null)
            synchronized(Singleton.class)
                if(singleton==null)
                    singleton=new Singleton();
                
            
        
        return singleton;
    


还有一种接触过的内部静态的单例模式:
    /**
     * 内部类单例
     */
    private Singleton()
    public static Singleton getInstance()
        return SingletonHolder.sInstance;
    
    private static class SingletonHolder
        public static final Singleton sInstance=new Singleton();
    





以上是关于创建型设计-单例模式的主要内容,如果未能解决你的问题,请参考以下文章

23天读懂23种设计模式:单例模式(创建型)

浅析设计模式——创建型模式之Singleton(单例模式)

设计模式之美-创建型-单例模式

创建型设计模式(单例模式)

设计模式——单例模式

设计模式(创建型模式)