黑马程序员——设计模式——单例设计模式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案

创建单例三步
1.构造函数私有化
2.自己在内部生成一个实例对象
3.提供一个方法返回对象

1、饿汉模式
优点:使用方便,没有多线程并发访问生成不同的问题
缺点:当类加载时就生成对象,浪费内存

//饿汉模式
class Singletom{
	// 1.构造函数私有化(防止在内存中生成不同的对象)
	// 不让他人创建对象
	// private关键字主要是防止他人new
	private Singletom(){}
	// 2.在类加载的时候主动创建一个对象(保证内存中只有一个对象)
	private static Singletom s = new Singletom();
	// 3.返回已经创建的对象
	// static 因为不让new,所以必须用静态方法,类名.方法名的方式调用
	public static Singletom getInstance(){
		return s;
	}
}


2.懒汉模式
优点:当需要的时候才生成对象,节省内存
缺点:容易出现多线程访问出现不同对象

//懒汉模式
class Singletom{
	// 1.构造函数私有化(防止在内存中生成不同的对象)
	// 不让他人创建对象
	// private关键字主要是防止他人new
	private Singletom(){}
	// 2.声明一个对象,初始化为null
	private static Singletom s = null;
	// 3.返回已经创建的对象
	public static Singletom getInstance(){
		//多线程访问时容易出现多个对象
		if(s == null) // 当为空的时候创建对象
			s = new Singletom();
		return s; // 返回对象
	}
}


3.改进的懒汉模式

class Singletom {


private Singletom() {}

private static Singletom s = null;


public static Singletom getInstance() {
		if (s == null) {// 判断空
			synchronized (Singletom.class) { // 加同步,静态只能用类名.class
				if (s == null) { //第二次判断空
					s = new Singletom();
				}
			}
		}
		return s;
<span style="white-space:pre">	</span>}
}


你可能感兴趣的:(黑马程序员——设计模式——单例设计模式)