单例设计模型在java中的思想就是在一个内存中一个类,只建立一个对象,其他程序只能该对象提供公有方法调用这个对象提供的去解决问题。以避免其他程序大量建立对象而造成内存浪费。
说白了就是利用pribate把类的属性私有化,再加static使对象达到唯一的效果,当然中间还有点小技巧。先给饿汉和懒汉的定义方式:
//懒汉式
class Single2{
//声明本类的引用类型变量,但是不创建本类的对象。
private static Single2 s;
//私有化构造函数
private Single2(){
}
//
public static Single2 getInstance(){
if(s==null){
//没有创建就先创建本类对象
s = new Single2();
}
return s;
}
}
//饿汉式
class Single{
//声明本类的引用类型变量指向本类的对象。
private static Single s = new Single();
//第一步:私有化构造函数
private Single(){}
//提供有一个公共静态的方法获取本类的对象
public static Single getInstance(){
return s;
}
}
饿汉单例模式:
1. 私有化构造函数。
2. 在本类中创建该类的对象,并且使用一个私有静态的变量指向。
3. 提供有一个公共静态的方法获取本类的对象。
懒汉单例设计模式:
1. 私有化构造函数。
2. 声明本类的引用类型变量,但是不创建本类的对象。
3. 提供一个公共静态的方法获取本类的对象,获取对象之前先判断是否已经创建了该类的对象
如果没有创建,那么创建该类的对象并返回,如果已经创建了该类的对象,那么就直接返回即可。
看上面两种方式的设计步骤,就可以明白,饿汉式和懒汉式的区别在于加载class文件有没有在建立对象。饿汉式在虚拟机加载class文件的时候创建对象,等待其他程序的调用(相当于在还没有饥饿的时候,粮食就准备好了)。而懒汉式是虚拟加载class文件的时候不创建对象,等其他程序第一次调用对象才创建对象(就感觉有点懒,等到饥饿的时候才开始去寻觅粮食,所以叫懒汉)。
由于懒汉式在有程序调用对象的时候才创建对象,所以有可能引发线程安全问题。一般推荐用饿汉单例模式!
哈哈 今天老师刚好讲到。献丑了! |