设计模式总结一:单利模式

简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。它有两种实现:饿汉式单例和懒汉式单例。

懒汉式单例:

何为懒汉式单例呢,可以这样理解,单例模式呢,其在整个应用程序的生命周期中只存在一个实例。懒汉式呢,就是这个单例类的这个唯一实例是在第一次使用 getInstance()时实例化的,如果您不调用 getInstance()的话,这个实例是不会存在的,即为 null。形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。

public class Singleton {
	
	//1、私有化构造方法
	private Singleton(){}
	
	//2、创建私有的全局静态(通过类方法调用)对象
	private static Singleton instance;
	
	//3、编写外部获取对象的方法
	public static Singleton getInstance(){
		if (instance  == null) {
			return instance = new Singleton();
		}
		return instance;
	}
}

从上面的这个 getInstance()中可以看出这个单例类的唯一实例是在第一次调用 getInstance()时实例化的,

所以此为懒汉式单例,但是懒汉模式的单例是线程不安全的(可以通过对对象加锁来实现多线程同步)。

饿汉式单例:

上面介绍了饿汉式单例,到这里来理解懒汉式单例的话,就容易多了,懒汉式单例由于人懒,所以其自己是不会主动实例化单例类的唯一实例的,而饿汉式的话,则刚好相反,其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例,其自己就会主动实例化单例类的这个唯一类。

public class Singleton {
	
	//1、私有化构造方法
	private Singleton(){}
	
	//2、创建私有的全局静态(通过类方法调用)对象
	private static Singleton instance = new Singleton();
	
	//3、编写外部获取对象的方法
	public static Singleton getInstance(){
		return instance;
	}
}


上面的饿汉式单例类中可以看到,当整个类被加载的时候,就会自行初始化 singleton 这个静态只读变量。而非在第一次调用 GetInstance()时再来实例化单例类的唯一实例,所以这就是一种饿汉式的单例类。饿汉模式的单例是多线程安全的,因为在类加载的时候就已经初始化好了对象,调用的时候不需要再创建,也就没有多线程创建一说。


好,到这里,就真正的把单例模式介绍完了,在此呢再总结一下单例类需要注意的几点:

一、单例模式是用来实现在整个程序中只有一个实例的。

二、单例类的构造函数必须为私有,同时单例类必须提供一个全局访问点。

三、单例模式在多线程下的同步问题和性能问题的解决。

四、懒汉式和饿汉式单例类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值