简单来说,保证一个类在内存中的对象就一个。
底层的实现思路一共分为了3个步骤:
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;
}
}
原文:https://www.cnblogs.com/fangweicheng666/p/15043376.html