饿汉模式:
package SingleTon;
/*Created by Anshay on 2017年10月14日
*email: anshaym@163.com
*类型:饿汉模式
*/
public class Singleton {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例,使用private static修饰(private不允许外部访问)
private static Singleton instance = new Singleton();
//3.提供一个用于获取实例的方法
public static Singleton getInstance(){
return instance;
}
}
懒汉模式:
package SingleTon;
/*Created by Anshay on 2017年10月14日
*Email: anshaym@163.com
*Explaination:懒汉模式
*/
public class Singleton2 {
//1.将构造方法私有化,不允许外边直接创建对象
//2.创建类的唯一实例,使用private static修饰
private static Singleton2 instance;
//3.提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getinstance(){
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
测试运行:
package SingleTon;
/*Created by Anshay on 2017年10月14日
*email: anshaym@163.com
*两种模式的区别:饿汉模式的特点是加载类时比较慢,但是运行时获取对象的速度比较快,线程安全
* 懒汉模式特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全
*/
public class Test {
public static void main(String[] args) {
// 饿汉模式
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2) {
System.out.println("s1和s2是同一个实例");
} else {
System.out.println("s1和s2不是同一个实例");
}
// 懒汉模式
Singleton2 s3 = Singleton2.getinstance();
Singleton2 s4 = Singleton2.getinstance();
if (s3 == s4) {
System.out.println("s3和s4是同一个实例");
} else {
System.out.println("s4和s4不是同一个实例");
}
}
}