创建型设计-单例模式

来源:互联网 发布:视频直播软件开发 编辑:程序博客网 时间:2024/06/16 21:37

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

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();    }