Java的单例设计模式
Java的单例设计模式
- 单例模式可以说是大多数开发人员在实际中使用最多的,常见的Spring默认创建的bean就是单例模式的。
- 单例模式有很多好处,比如可节约系统内存空间,控制资源的使用。
简单来说,保证一个类在内存中的对象就一个。
底层的实现思路一共分为了3个步骤:
- 对本类构造方法私有化,防止外部调用构造方法创建对象
- 创建全局唯一的对象,也做私有化处理
- 通过自定义的公共方法将创建好的对象返回(类似封装属性后的getXxx() )
实现方式一:饿汉式
package com.cnblogs;
/*
本类用于测试单例设计模式方案1,饿汉式
*/
public class TestSingle1 {
public static void main(String[] args) {
MySingle.getMySingle().show();//试试能不能用
MySingle mySingle1 = MySingle.getMySingle();
MySingle mySingle2 = MySingle.getMySingle();
System.out.println(mySingle1.equals(mySingle2));//true
System.out.println(mySingle1);//com.cnblogs.MySingle@1b6d3586
System.out.println(mySingle2);//com.cnblogs.MySingle@1b6d3586
}
}
class MySingle{
/*
对象私有化的目的,是为了不让外界直接获取创建好的对象
*/
private static MySingle mySingle = new MySingle();
//提供公共的全局访问点,共外界调用对象
public static MySingle getMySingle(){
//返回创建好的对象进行返回
return mySingle;
}
/*
构造方法私有化,不让外部随意调用构造方法创建对象
*/
private MySingle(){}
public void show(){
System.out.println("试试能不能用");
}
}
实现方式二:懒汉式
package com.cnblogs;
/*
本类用于测试单例设计模式方案2,懒汉式
*/
public class TestSingle2 {
public static void main(String[] args) {
MySingle2 s1 = MySingle2.getMySingle2();
MySingle2 s2 = MySingle2.getMySingle2();
System.out.println(s1);//com.cnblogs.MySingle2@1b6d3586
System.out.println(s2);//com.cnblogs.MySingle2@1b6d3586
}
}
class MySingle2{
//构造方法私有化
private MySingle2(){}
//创建引用类型变量
private static MySingle2 mySingle2;
//提供公共的全局访问点
public static MySingle2 getMySingle2(){
if(mySingle2 == null){
//如果为null,就说明之前没有创建
mySingle2 = new MySingle2();//创建对象
}
//直接返回原来的对象
return mySingle2;
}
}