单例有饿汉式、懒汉式之分,这里通过几个简单的例子简单的说明一下,以供后续需要时参考~
1、饿汉式
package com.oop.danli;
/**
* 单例:饿汉式
* @author xzw
*
*/
public class SingleTon {
//1.构造器私有化
private SingleTon(){
//不能创建对象了
}
//2.自己创建对象
private static SingleTon instance = new SingleTon();
//3.提供访问的接口
public static SingleTon getInstance(){
return instance;
}
}
测试类:
package com.oop.danli;
/**
* 单例饿汉式测试类
* @author xzw
*
*/
public class TestSingleTon {
public static void main(String[] args) {
SingleTon instance1 = SingleTon.getInstance();
SingleTon instance2 = SingleTon.getInstance();
SingleTon instance3 = SingleTon.getInstance();
System.out.println(instance1 == instance2);
System.out.println(instance1 == instance3);
System.out.println(instance2 == instance3);
}
}
测试结果:
true
true
true
2、懒汉式
package com.oop.danli;
/**
* 单例:懒汉式
* @author xzw
*
*/
public class SingleTon2 {
//1.构造器私有化
private SingleTon2(){};
//2.自己创建对象
private static SingleTon2 instance = null;
//3.提供访问的接口
public static SingleTon2 getInstance(){
if (instance == null) {
instance = new SingleTon2();
}
return instance;
}
}
测试类:
package com.oop.danli;
/**
* 单例懒汉式测试类
* @author xzw
*
*/
public class TestSingleTon2 {
public static void main(String[] args) {
SingleTon2 instance1 = SingleTon2.getInstance();
SingleTon2 instance2 = SingleTon2.getInstance();
SingleTon2 instance3 = SingleTon2.getInstance();
System.out.println(instance1 == instance2);
System.out.println(instance1 == instance3);
System.out.println(instance2 == instance3);
}
}
测试结果:
true
true
true