设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例的特点:
1.只有一个实例
2.这个实例由自己创建 ,构造方法私有
3. 对外提供一个返回唯一实例的方法
单例模式常用的两种创建方式
方式一:饿汉式(不管你用不用我先给你创建)
public class Singleton {
private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } } 方式二:懒汉式(想不给你创建,你要用了我再给你创建)
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
两种方式对比:饿汉式因为在初始化时就创建,会占内存;懒汉式有线程安全问题,不适用与多线程应用.需要加锁才可以在多线程中使用,但是加锁会影响程序执行效率
第三种方式:双重锁 方式
public class Singleton {
private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } } 双重锁优势:懒加载保证了占用内存问题,双重锁保证了多线程中的 效率问题
总结:一般情况下使用方式一 ;不推荐使用方式二,有特殊要求时 使用方式三(满足各方要求)
|
|