Java 设计模式之单例模式详解

来源:互联网 发布:web网站数据分析 编辑:程序博客网 时间:2024/05/16 05:20

 1.定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。

2.单例模式通用代码如下

第一种方式:饿汉式单例

public class Singleton {private static final Singleton singleton=new Singleton();//private构造函数确保了一个在一个应用中只产生了一个实例//并且是自行实例化的(new Singleton())private Singleton(){}public static Singleton getSingleton(){return singleton;}//类中其他方法,尽量为static}


第二种方式:懒汉式单例

package com.yy.singleton;/** *  * 单例模式:一个类只有一个实例,对外提供获取实例的方法 *  */public class Singleton {private static Singleton instance = null;private Singleton(){}/** * 此种实现方式在多线程下失效 * @return */public static Singleton getInstance(){if(instance == null){instance = new Singleton();}return instance;}/** * 此种实现方式解决了多线程下单例失效问题,但是每次执行此方法时都会受到同步锁的限制,效率打了折扣 * @return */public synchronized static Singleton getInstance1(){if(instance == null){instance = new Singleton();}return instance;}/** * 此种实现方式与上面的相同,只是把synchronized移到方法体内 * @return */public static Singleton getInstance2(){synchronized (Singleton.class) {if(instance == null){instance = new Singleton();}}return instance;}/** * 双重锁定(Double-Check Locking) * 当instance不为空时,就不会进入synchronized代码块。 * 此种实现方式避免了每次调用都进行同步控制,只有instance在第一次构造时需要同步 * @return */public static Singleton getInstance3(){if(instance == null){synchronized (Singleton.class) {if(instance == null){instance = new Singleton();}}}return instance;}}
      最后一种方法使用了双重锁机制,可以提高性能。