先附上我的设计模式源码
我的设计模式demo仓库
1.饿汉单例模式
/**
*
* @author 233admincol
*@description 饿汉单例模式
*在创建这个类时就初始化静态类对象instance
*缺点:如果只是加载本类,而不是调用getInstance(),甚至永远没有调用,则会造成资源浪费。
*/
public class singleton1 {
private static singleton1 instance=new singleton1();
public singleton1() {
}
public static singleton1 getInstance() {
return instance;
}
}
2.懒汉单例模式
/**
*
* @author 233admincol
*@description 懒汉单例模式
*不先对静态类对象instance初始化
*缺点:资源利用高了。但是,每次调用getInstance()方法都需要同步,并发效率较低。
*/
public class singleton2 {
private static singleton2 instance;
private singleton2() {
}
public static synchronized singleton2 getinstance() {
if (instance==null) {
instance=new singleton2();
}
return instance;
}
}
3.双重检测锁式
- 优点:将同步内容下方到if内部,提高了执行的效率不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了
- 缺点:由于JVM底层内部模型原因,偶尔会出现问题.
/**
*
* @author 233admincol
*@description 双重检测锁实现模式
*同步内容下方到if内部,提高了执行的效率不必每次获取对象时都进行同步,只有第一次才同步创建了以后就没必要了。
*缺点:由于编译器优化原因和JVM底层内部模型原因,偶尔会出现问题,不建议使用。
*/
public class singleton3 {
private static singleton3 instance=null;
private singleton3() {
}
public static singleton3 getinstance() {
if (instance==null) {
singleton3 sc;
synchronized (singleton3.class) {
sc=instance;
if (sc==null) {
synchronized (singleton3.class) {
if (sc==null) {
sc=new singleton3();
}
}
instance=sc;
}
}
}
return instance;
}
}
4.静态内部类实现模式
- 优点:兼备了并发高效调用和延迟加载的优势
- 缺点:和上面3种方法一样,无法防止通过反射和反序序列化破坏单例模式
/**
*
* @author 233admincol
*@description 静态内部类实现模式
*1.外部类没有static属性,则不会想饿汉式那样立即加载对象。
*2.只有真正调用getInstance(),才会加载静态内部类,加载类时是线程安全的。instance是static final类型,保证了内存中只有这样一个实例存在,而且只能被赋值一次,从而保证了线程安全性
*3.兼备了并发高效调用和延迟加载的优势。
*/
public class singleton4 {
private singleton4() {
}
private static class SingletonClassInstance{
private static final singleton4 instance=new singleton4();
}
public static singleton4 getinstance() {
return SingletonClassInstance.instance;
}
}
5.枚举实现单例模式
- 优点:实现简单,枚举本身就是单例模式。由JVM从根本上提供保障,避免通过反射和反序列化的漏洞
- 缺点:不能够延时加载
/**
*
* @author 233admincol
*@description 枚举单例模式
*实现简单,枚举本身就是单例模式。由JVM从根本上提供保障,避免通过反射和反序列化的漏洞
*缺点:无延迟加载
*/
public enum singleton5 {
INSTANCE;
public void singletonOperation() {
}
}