一、单例设计模式
1.设计模式:一般都认为有23种设计模式,单例模式是其中比较简单的一种
2.单例模式简单来说就是开发一个类,保证它只能创造出一个实例.
3.单例设计模式有2种:饿汉式单例、懒汉式单例
4.如下面例子所示:首先,能想到的最简单的实现是,把类的构造函数写成private
的,从而保证别的类不能实例化此类,然后定义一个静态的本类属性,static修饰的
属性在内存中只会存一份,static属性会在类加载后第一时间初始化,最后提供一
个静态方法,返回唯一的实例,这样,调用者就可以通过这个引用使用这个实例
了,这个例子是一个饿汉式单例,它也是有一些 缺点,无论这个类是否被使用,
都会创建一个实例对象。
5.下面我们对上面例子进行一些优化,也是另一种单例模式:懒汉式单例,它创建
实例比较晚,类加载时不会创建实例,当调方法获取时才会创建,但是需要给
getInstance()加上同步锁,一个线程必须等待另外一个线程创建完后才能使用这
个方法,这就保证了单例的唯一性,而且使用synchronize同步锁可以保证线程安全
6.虽然这样只会创建唯一的单例,但是它还是有一些性能的问题,究竟是整个方法都
必须加锁,还是其中某一句代码加锁就足够了,所以看下面的例子,首先去掉
getInstance() 的锁,然后把同步锁加载到if语句上,因为每次调用getInstance()的时候
必然要经行同步,性能的问题还是存在,所以使用双重锁(双重判定锁)可以只锁
几行代码,提升性能。
相关文章: