深入浅出Java单例设计模式

单例设计模式

设计模式是在大量的实践中总结后优选的代码结构、编程风格以及解决问题的思考方式。

单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能产生一个对象实例,并且该类只提供一个取得其对象的实例方法.

单态设计模式类型

 1) 饿汉单例设计模式(保证在内存中只有一个对象)

  1. 私有化构造函数。

  2. 声明本类的引用类型变量,并且使用该变量指向本类对象。

  3. 提供一个公共静态的方法获取本类的对象。

 2) 懒汉单例设计模式(只有用到对象时才创建)

   1. 私有化构造函数。

   2. 声明本类的引用类型变量,但是不要创建对象,

   3. 提供公共静态的方法获取本类的对象,获取之前先判断是否已经创建了本类对象,如果已经创建了,那么直接返回对象即可,如果还没有创建,那么先创建本类的对象,然后再返回。


推荐使用: 饿汉单例设计模式。  因为懒汉单例设计模式会存在线程安全问题,目前还不能保证一类在内存中只有一个对象。

在java中实现单态模式只需要执行以下三步:  

1.将类的构造方法的访问权限声明为private.这样就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象.

2.在类内部生成一个静态的实例.

3.提供一个静态的方法用于外部取得该类的实例.

因为在类的外部无法得到类的对象,所以只能调用该类的某个静态方法以返回类内部创建的对象,又因为静态方法只能访问类中的静态成员变量,所以,指向类内部产生该类对象的变量也必须定义成静态的。

1)饿汉设计模式:

//饿汉单例设计模式----> 保证Single在在内存中只有一个对象。(直接创建完对象  饥饿的等待着调用方)

class Single{

	//声明本类的引用类型变量,并且使用该变量指向本类对象
	private static	Single s = new Single();

	//私有化构造函数
	private Single(){}

	//提供一个公共静态的方法获取本类的对象
	Public static  Single getInstance(){
		return s;
	}
}

2)懒汉设计模式

//懒汉单例设计模式(用到这个对象才new ----> 保证Single在在内存中只有一个对象。(懒  我就不创建对象,你用到我我再创建)

class Single2{
	
	//声明本类的引用类型变量,不创建本类的对象
	private static Single2 s;

	//私有化了构造函数
	private Single2(){}

	//
	public static Single2 getInstance(){
		if(s==null){
			s = new Single2();
		}
		return s;
	}
}

例如图书馆:

package com.entity;
public class Library {   //图书馆只需要一个
   // 定义一个私有、静态的引用变量
	private static Library library; 

	private Library() // 构造器私有
	{ }

	// 提供一个公有、静态方法获得唯一实例
   public static Library getLibraryInstance()
	{
		if (library == null) // 如果还未创建实例
		{
			library = new Library(); // 创建一个实例
		}
		return library; // 将它返回
	}
}

猜你喜欢

转载自blog.csdn.net/zgl1243094406/article/details/80186750