/**
* 单例模式:恶汉模式 懒汉模式 final单例对象区别
* @author Administrator
*
*/
public class SingleDemo {
public static void main(String[] args) {
//恶汉单例模式在调用方法前已经完成对象的初始化了
Single single = Single.getInstance();
//懒汉模式只有在调用时候才会初始化,但再次调用的时候不会再做初始化动作
Single2 single2 = Single2.getInstance();
//将单例对象定义为final
Single3 singleFinal = Single3.getInstance();
System.out.println(single);//运行结果:Single@1aa9f99
System.out.println(single2);//运行结果:Single2@1b15692
Single single3 = Single.getInstance();
Single2 single4 = Single2.getInstance();
System.out.println(single3);//运行结果:Single@1aa9f99 说明获得了同一个单例对象Single
System.out.println(single4);//运行结果:Single2@1b15692 说明获得了同一个单例对象Single2
System.out.println(singleFinal);
//获取SuperMan
SuperMan superMan = SuperMan.getInstance();
System.out.println("superman's age is " +superMan.getAge());
System.out.println("superman's name is " +superMan.getName());
//修改superMan的年龄
superMan.setName("Tom");
System.out.println("superman's name is " +superMan.getName());
}
}
class Single{
//如果显式的初始化了Single那么即为恶汉模式
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
class Single2{
//如果没有显式初始化了Single那么即为懒汉模式
private static Single2 s;
public static Single2 getInstance(){
if(s==null){
s = new Single2();
}
return s;
}
}
class Single3{
//将单例加入final关键字后,不能够采取懒汉模式,因为final关键字不允许修改对象,所以必须进行显式初始化
private static final Single3 s = new Single3();
public static Single3 getInstance(){
return s;
}
}
class SuperMan{
private int age;
private String name;
public int getAge() {
return age;
}
//如果设置了修改名称的方法,那么在外部调用对象时候,也可以对象的名称,但是设置了final关键字后则不能够修改
public void setName(String name){
this.name = name;
}
public String getName() {
return name;
}
private SuperMan(int age,String name){
this.age = age;
this.name = name;
}
private static final SuperMan superMan = new SuperMan(22, "Frank");
public static SuperMan getInstance(){
return superMan;
}
}