单例模式详解-1

    

声明:此处代码都是引用私塾Java设计模式

1.定义

         保证一个类只有一个实例,并提供一个访问它的全局访问点。

        

2.常见实现方式:懒汉式和饿汉式

    下面介绍两种实现方式:懒汉式

     

public class Singleton {
	/**
	 * 定义一个变量来存储创建好的类实例
	 */
	private static Singleton uniqueInstance = null;
	/**
	 * 私有化构造方法,好在内部控制创建实例的数目
	 */
	private Singleton(){
		//
	}
	/**
	 * 定义一个方法来为客户端提供类实例
	 * @return 一个Singleton的实例
	 */
	public static synchronized Singleton getInstance(){
		//判断存储实例的变量是否有值
		if(uniqueInstance == null){
			//如果没有,就创建一个类实例,并把值赋值给存储类实例的变量
			uniqueInstance = new Singleton();
		}
		//如果有值,那就直接使用
		return uniqueInstance;
	}
	
}

    饿汉式

    

/**
 * 饿汉式单例实现的示例
 */
public class Singleton {
	/**
	 * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只会创建一次
	 */
	private static Singleton uniqueInstance = new Singleton();
	/**
	 * 私有化构造方法,好在内部控制创建实例的数目
	 */
	private Singleton(){
		//
	}
	/**
	 * 定义一个方法来为客户端提供类实例
	 * @return 一个Singleton的实例
	 */
	public static Singleton getInstance(){
		//直接使用已经创建好的实例
		return uniqueInstance;
	}
	
}

   上面是常见的两种单例模式的实现方式,通过上面两中实现方式可以总结出单例模式的实现步骤:

  1. 私有化构造函数,控制实例化数目
  2. 提供一个全局访问点,为客户端提供类实例
  3. 该全局访问点一定要加上static,为类方法
  4. 定义一个变量来存储定义好的类实例
  5. 因为该变量要在静态方法中应用所以要加static

 3.懒汉式和饿汉式的简单比较

    饿汉式在类加载的时候,就加载了类实例,而懒汉式只有在调用全局访问点时才会创建实例,显然饿汉式运行会比懒汉式的时间更长,但是占用的内存更大,简而言之,饿汉式空间换时间,而懒汉式是时间换空间。

   另外重要的一点是饿汉式是线程安全的,而懒汉式是线程不安全的,这点在下面还会介绍

    

   

     

猜你喜欢

转载自tryhl.iteye.com/blog/2000133