在JAVA中,有一种著名的设计模式,叫做单例模式,何为单例模式呢?简单的说法就是:该类的对象只有唯一一个,我们都知道,一般来说类的对象new出来后是不一样,而单例模式new出来的对象,完全还是那一个。打个比方,你的老婆叫小丽,那么你叫老婆的时候,指的就是小丽,而不是其他某些人。
那如何实现,有两种方法,一种叫饿汉式,一种叫懒汉式。
饿汉式就是直接把对象new出来,懒汉式是通过方法new出来。
eg:
饿汉式:
class SingleDemo{
private static SingleDemo s1 =new SingleDemo();//static修饰,随着类的加载而加载
private SingleDemo(){}//私有构造方法,外界就不能构造对象了
public static SingleDemo getS1(){
return s1;
}
}
懒汉式:
class SingleDemo2{
private static SingleDemo2 s2;
private SingleDemo2(){}//私有构造方法
public static SingleDemo2 getS2(){
if(s2==null){
s2 =new SingleDemo2();//和饿汉式相比,这个时候才构造对象
}
return s2;
}
}
上述就是产生单利模式的对象方法。
验证:
class TestDemo{
public static void main(String[] args){
SingleDemo a =SingleDemo.getS1();//只能用方法产生对象
SingleDemo b =SingleDemo.getS1();
SingleDemo2 c =SingleDemo.getS2();
SingleDemo2 d =SingleDemo.getS2();
System.out.println(a==b);
System.out.println(c==d);
}
}
结果:true
true
说明产生的对象是同一个,实现了上述要求。从代码分析,单例模式实现要点是:首先要使用static修饰类,并用private修饰构造方法,使其他类不能用new的方式产生对象,使用静态方法,产生对象。饿汉式和懒汉式的区别是:饿汉式是一开始就new了对象,在方法中直接返回了该对象。而懒汉式则是先判断是否有对象,如果没有再new对象。两者结果就是都产生了唯一一个对象。验证中用获取对象的方法获取多个对象,发现他们实际上是同一个。通俗的说法就是女皇帝的类的对象,不管获取多少次,都是武则天一样。也有点类似一夫一妻制,一个类一个对象