一.什么是单例模式
一个类对应一个对象
二.特点
2.1唯一的对象在外界调用方法来获取这个唯一对象的时候才创建的
2.2有线程安全问题

2.3没安全性的写法
public class SingleOne{
private static SingleOne instance;
private SingleOne() {};
/*public synchronized static SingleOne getInstance() {
if (instance == null) {
instance = new SingleOne();
}
return instance;
}*/
public static SingleOne getInstance() {
if (instance == null) {
synchronized (SingleOne.class) {
if (instance == null) {
instance = new SingleOne();
}
}
}
return instance;
}
}
含内部类的
public class SingleFive {
/* static {
System.out.println("外部类的静态代码块");
}*/
private SingleFive(){//构造器私有化
// System.out.println("外部类的构造器");//new对象是执行
}
public static SingleFive getInstance(){
return Inner.instance;
}
private static class Inner{
static SingleFive instance = new SingleFive();
/* static {
System.out.println("内部类的静态代码块");
}*/
}
/*
public static void method(){
System.out.println("外部类的普通的静态方法");
}*/
}
三.写法要求
public class SingleOne {
private static SingleOne instance;
private SingleOne() {};
public static SingleOne getInstance() {
if (instance == null) {
instance = new SingleOne();
}
return instance;
}
}
import org.junit.jupiter.api.Test;
public class TestSingleOne {
@Test
public void test() {
SingleOne s1 = SingleOne.getInstance();
SingleOne s2 = SingleOne.getInstance();
System.out.println(s1 == s2);
}
}