单例设计模式总结(未完待续)

一、单例模式(单线程简单单例模式):
单例:单一个实例(Instance)。Singleton的英文意义是独身,也就是只有一个人,应用在面向对象语言上。Singleton模式可以保证一个类别 只有一个实例,并只提供一个访问这个实例的方法getInstance()。

1.饿汉式:就是一开始就初始化好了实例,getInstance()的时候直接返该实例。

package com.broada.panjie.entity;
/**
 * 饿汉式单例模式
 * @author panjie
 */
public class HungerSingleton {
	/**
	 * 一开始就初始化好了实例
	 */
	private static HungerSingleton instance = new HungerSingleton();
	
	private HungerSingleton(){//私有化构造器
	}
	
	public static HungerSingleton getInstance(){
		return instance;
	}	
}


2.懒汉式:即延缓加载式(Lazy Initialization),需要的时候才创建实例。
package com.broada.panjie.entity;

/**
 * 懒汉式单例模式
 * @author panjie
 */
public class LazySingleton {
	/**
	 * 一开始不先创建一个实例
	 */
	private static LazySingleton instance = null;
	
	private LazySingleton(){
		//私有化构造器
	}
	
	public static LazySingleton getInstance(){
		if(instance==null){
			instance = new LazySingleton();
		}
		return instance;
	}	
}


二、多线程单例模式

1.简单多线程单例模式:
接下来我们就会碰到多线程的单例问题,最简单的解决方法就是在getInstance()方法前加锁。

public class Singleton {
      private static Singleton instance = null;
      private Singleton(){}
      public synchronized static Singleton getInstance() {
          if (instance == null) {
              instance = new Singleton();
          }
          return instance;
      }
}


2.双重检查单例模式(Double-check Locking):
因为加锁的同步机制会造成性能上的低效。为了顾及Singleton、Lazy Initialization与效能问题,于是又有了双重检查单例模式(Double-check Locking)。

public class Singleton {
      private static Singleton instance = null;
      private Singleton(){}
      public static Singleton getInstance() {
          if (instance == null){
              synchronized(Singleton.class){
                  if(instance == null) {
                       instance = new Singleton();
                  }
              }
          }
          return instance;
      }
}

猜你喜欢

转载自303272388-qq-com.iteye.com/blog/1409610
今日推荐