java设计模式 单例模式

来源:互联网 发布:2017淘宝热销产品 编辑:程序博客网 时间:2024/06/16 23:39

这个模式大家应该都用过,目的就是保证类的对象的唯一性,那么在实现的过程中呢,有多种方法。

  1. 饿汉式,类加载就创建
    这个也是写起来最方便的
package bean;public class SingleBean {    //实例化私有对象    private static SingleBean singleBean=new SingleBean();    //封装构造方法避免其它类直接new    private SingleBean(){    }    //提供get方法    public static SingleBean getSingleBean() {        return singleBean;    }}

2.懒汉式 同步代码双重判断

package bean;public class SingleBean {    //实例化私有对象    private static SingleBean singleBean;    //封装构造方法避免其它类直接new    private SingleBean(){    }    //提供get方法    public static SingleBean getSingleBean() {        if(singleBean==null){            synchronized (SingleBean.class) {//同步代码块,避免线程安全错误                if(singleBean==null){//再次判断                    singleBean=new SingleBean();                }            }        }        return singleBean;    }}

3.使用java的枚举 很简单
如果对java的枚举不熟悉可以点击java 枚举详解

package bean;public enum SingleBean {    SINGLEBEAN;}

4.使用一个静态内部类持有对象,避免初始化的时候加载

package bean;public class SingleBean {    // 封装构造方法避免其它类直接new    private SingleBean() {    }    private static final class SingleBeanHolder {//静态内部类        private static SingleBean singleBean = new SingleBean();    }    public static SingleBean getSingleBean() {        return SingleBeanHolder.singleBean;    }}

除了第一中饿汉式,其它的都不会在加载类的时候进行初始化,且都是线程安全的。