默认整个系统只有一个对象。分懒汉式和饿汉式
懒汉式和饿汉式
/**
* 懒汉式 单例模式
* 在第一次调用getInstance()方法的时候才会去实例化一个对象
*/
public class SingletonDemo {
//属性可以忽略 只是为了验证测试数据使用
private String userName ;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
//2.定义一个对象变量
private static SingletonDemo singletonDemo = null;
//1.私有化构造方法
private SingletonDemo() {
}
//3.提供一个实例化的静态方法
public static SingletonDemo getInstance(){
if (singletonDemo == null) {
SingletonDemo demo = new SingletonDemo();
demo.setUserName("SingletonDemo");
singletonDemo = demo;
}
return singletonDemo;
}
}
/**
* 饿汉式 单例模式 初始化对象 提供外界调用
*/
class SingletonDemo2{
//属性可以忽略 只是为了验证测试数据使用
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//2.初始化一个对象
private static final SingletonDemo2 demo2 = new SingletonDemo2("SingletonDemo2");
//1.私有化构造方法
private SingletonDemo2() {
}
private SingletonDemo2(String name) {
this.name = name;
}
//3.提供对外的获取对象方法
public static SingletonDemo2 getInstance(){
return demo2;
}
}
class Demo{
public static void main(String[] args) {
SingletonDemo instance = SingletonDemo.getInstance();
SingletonDemo instance1 = SingletonDemo.getInstance();
System.out.println(instance);
System.out.println(instance1);
System.out.println(instance1 == instance);
SingletonDemo2 instance2 = SingletonDemo2.getInstance();
SingletonDemo2 instance3 = SingletonDemo2.getInstance();
System.out.println(instance2);
System.out.println(instance3);
System.out.println(instance2 == instance3);
}
}
//结果
com.wangguo.singleton.SingletonDemo@1d44bcfa
com.wangguo.singleton.SingletonDemo@1d44bcfa
true
com.wangguo.singleton.SingletonDemo2@266474c2
com.wangguo.singleton.SingletonDemo2@266474c2
true