Java中单例模式实现

来源:互联网 发布:java和php哪个前景好 编辑:程序博客网 时间:2024/06/10 18:17

单例模式是Java编程中应用最多的一种设计模式,现在个人将单例模式经常使用到的几种实现方式,简单列举一下:

1、 立即加载模式或者说恶汉模式

public class SingleInstance1 {    //立即加载模式或者说恶汉模式,即在调用方法前实例已经被创建    public static final SingleInstance1 singleInstance1 = new SingleInstance1();    private SingleInstance1(){}    public static SingleInstance1  getInstance(){        return singleInstance1;    }}

2、延迟加载模式或者懒汉模式

其也称之为双重检查锁机制(DCL)

public class SingleInstance2 {    //延迟加载或者懒汉模式    //使用双重检测机制来解决问题,既保证了不需要同步代码的异步执行性,有保证了单例的效果    public volatile static SingleInstance2 singleInstance2;    private SingleInstance2(){}    public static SingleInstance2 getSingleInstance(){        try {            if(singleInstance2==null){                synchronized(SingleInstance2.class){                    if(singleInstance2==null){                        singleInstance2 = new SingleInstance2();                    }                }            }        }catch (Exception e){            e.printStackTrace();        }        return singleInstance2;    }}

3、 静态内部类实现机制

使用静态内部类同样能够实现DCL的效果。

public class SingleInstance3 {    public static class SingleInstance3Handler{        private static SingleInstance3 singleInstance3 =  new SingleInstance3();    }    //使用静态内置类实现DCL同样的效果    private SingleInstance3(){}    public static SingleInstance3 getInstance(){        return SingleInstance3Handler.singleInstance3;    }}

4、Static静态代码块实现

public class SingleInstance4 {    private SingleInstance4(){}    public static SingleInstance4 singleInstance4;    static {        singleInstance4 = new SingleInstance4();    }    public static SingleInstance4 getInstance(){        return singleInstance4;    }}

5、枚举类实现

public class MySingleInstance {    public enum SingleInstance5{        connectionFactory;        private Object object;        private SingleInstance5() {            object = new Object();        }        public Object getObject(){            return object;        }    }    public static Object getObject(){        return SingleInstance5.connectionFactory.getObject();    }}

以上是Java语言经常使用到的几种实现方式,这里仅仅是简单列举了一下,当然其他语言也同样能够实现,原理是相同的。以上三种实现方式在多线程的环境条件下,能够是线程安全的。

原创粉丝点击