单例设计模式
1.什么是设计模式
针对特定的问题提供的固定的最优的解决方案。
在面向对象的编程语言中有23种设计模式:
其中之一:单例设计模式
2.什么是单例设计模式
核心:确保对象唯一性。
即:拿到某个类的对象,始终是同一个对象,多个对象引用的引用地址是相同的(栈中的多个对象引用指向堆中的同一个实体对象)
基本类型变量恒等比较比较的是两个变量的值是否相等,引用类型变量恒等比较比较的是两个引用变量引用的地址是否相等。
1】 饿汉式(注释详细解释了为什么这样做)
之所以叫饿汉式,是因为对象在类加载的时候就创建了。
//饿汉式
public class Single
{
//为了防止在外类中new对象,所以构造器是私有的
private Single(){
}
/*static 是核心,被static修饰的s对象,是Single类一加载就在本类中
创建本类对象成员变量。只存在一个。
对象成员变量s被static修饰后属于类,可以通过类名.变量的方式使用
但是为了安全性,不让外类直接访问,所以把s对象也私有化。
*/
private static Single s = new Single();
/*既然我们把s对象私有化了,那么我们就需要通过一个公共的访问方式来得到
这个对象,所以创建了一个公共的,返回值类型为Single的getSingle()方法,
通过返回s来访问。
*/
public static Single getSingle(){
return s;
}
}
2】 懒汉式
在调用方法时创建对象。
//懒汉式
public class Single2
{
//1)私有化构造器
private Single2(){
}
//2)在本类中先声明私有的静态的本类对象成员变量
private static Single2 s = null;
public static Single2 getSingle(){
if(s == null){
s = new Single2();
}
return s;
}
}
但是要注意的是:懒汉式在多线程中是不安全的,在创建对象时可能创建多个对象,以至于造成访问不是同一个对象。
解决方法:对实例化方法加锁 public static synchronized Single2 getSingle()