最基础的设计模式,不会说不过去。
1
package singlePattern;
/**
* 饿汉式
*/
public class Singleton1 {
private static Singleton1 instance = new Singleton1();
private Singleton1() {
}
public static Singleton1 getInstance() {
return instance;
}
public static void main(String[] args) {
Singleton1 instance = Singleton1.getInstance();
}
}
2
package singlePattern;
/**
* 饿汉式
*/
public class Singleton2 {
private static Singleton2 instance = null;
static {
instance = new Singleton2();
}
private Singleton2() {
}
public static Singleton2 getInstance() {
return instance;
}
}
3
package singlePattern;
/**
* 懒汉式,但是这种线程不安全,不存在可用性
*/
public class Singleton3 {
public static Singleton3 instance = null;
private Singleton3() {}
public static Singleton3 getInstance() {
if (instance == null) {
instance = new Singleton3();
}
return instance;
}
}
4
package singlePattern;
/**
* 懒汉式,线程相对安全,效率低,每次getInstance都需要持锁
*/
public class Singleton4 {
private static Singleton4 instance = null;
private Singleton4() {}
public static synchronized Singleton4 getInstance() {
if (instance == null) {
instance = new Singleton4();
}
return instance;
}
}
5
package singlePattern;
/**
* 懒汉式,但是线程不安全
*/
public class Singleton5 {
private static Singleton5 instance = null;
private Singleton5() {}
private static Singleton5 getInstance() {
if (instance == null) {
synchronized (Singleton5.class) {
instance = new Singleton5();
}
}
return instance;
}
}
6
package singlePattern;
/**
* 懒汉式,双重校验锁
*/
public class Singleton6 {
private static Singleton6 instance = null;
private Singleton6(){}
public static Singleton6 getInstance() {
if (instance == null) {
synchronized (Singleton6.class) {
if (instance == null) {
instance = new Singleton6();
}
}
}
return instance;
}
}
7
package singlePattern;
/**
* 内部类,通过静态类初始化时进行instance的创建,类似饿汉式,但是在初始化时别的线程
* 无法干扰,而且也可以在形式上有懒加载的感觉
*/
public class Singleton7 {
private Singleton7(){}
private static class SingletonHolder {
private static Singleton7 instance = new Singleton7();
}
public static Singleton7 getInstance() {
return SingletonHolder.instance;
}
}
8
package singlePattern;
/**
* 枚举
*/
public enum Singleton8 {
instance;
private Singleton8(){}
public void method(){}
}
现在都很推荐用枚举,建议多了解,明天写个相关的博客