设计模式之单例模式

来源:互联网 发布:金相分析软件下载 编辑:程序博客网 时间:2024/06/07 11:54

java有23中设计模式,单例模式是最简单的,也是使用频率比较高的,但是实现方式有很多种,接下来我们介绍常用的几种方式。

饿汉方式

    package com.single.instance;    public class Sun {        private Sun() {}        private static final Sun instance = new Sun();        public static Sun getInstanceSun() {            return instance;        }    }

所谓的饿汉就是在类初始化的时候,我们就给对象实例化。
优点:代码简单,调用快
缺点:类初始化的时候就要创建对象。

懒汉方式(非线程安全)

package com.single.instance;public class Moon {    private Moon(){};    private static Moon instance;    public static Moon getInstanceMoon(){        if(instance==null){            instance=new Moon();        }        return instance;    }}

所谓的懒汉的就是,在我调用的获取对象方法的时候,才去创建对象。但是懒汉又可以分为,线程安全,线程不安全,以上是线程不安全的实现方式,如果在多线程中可能就会出错。

懒汉方式(线程安全)

package com.single.instance;public class Moon {    private Moon() {    };    private static Moon instance;    public static Moon getInstanceMoon() {        if (instance == null) {            synchronized (Moon.class) {                if (instance == null) {                    instance = new Moon();                }            }        }        return instance;    }}

懒汉线程安全,是在非安全的基础上加了特定的条件和同步锁,双重判定解决线程安全的问题。

静态内部类

    package com.single.instance;    public class Single {        private Single() {        };        private static class Singlehodle {            private static final Single instances = new Single();        }        public static Single getInstance() {            return Singlehodle.instances;        }    }

Single 类时并不会初始化instances ,只有第一次调用getInstance方法时虚拟机加载

SingletonHolder 并初始化sInstance ,这样不仅能确保线程安全也能保证Singleton类的唯一性,所以

推荐使用静态内部类单例模式

总结:单例模式的实现步骤
1.私有构造
2.创建对象引用
3.定义对外提供的方法获取单例对象

原创粉丝点击