版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40301026/article/details/88529986
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
设计步骤:
1.私有构造器
2.提供私有的静态属性
3.提供一个静态的共有方法去访问静态属性。
单例模式的优点:
1、内存中只有一个实例,减少内存开支,特别是在频繁创建对象时。
2、内存中只有一个实例,减少性能开销,特别是在一个对象产生需要较多资源开销。
3、避免对资源的多用占用。
扫描二维码关注公众号,回复:
5756090 查看本文章
4、可以在系统设置全局访问点,优化和共享资源访问。
单例模式的缺点:
1、一般没有接口,扩展困难。
2、对测试不利,单例类必须完成后才可以测试。
3、与单一职责原则冲突。
单例模式的使用场景:
1、要求生成唯一序列号的环境。
2、整个项目中需要一个共享访问点或共享数据。
3、创建一个对象消耗的资源过多。
4、需要大量的静态常量和静态方法的环境。
其实现主要有两种模式:
1.懒汉式
1.1懒汉式,线程不安全
package cn.liu.syn;
public class Singleton {
//私有构造器
private Singleton(){}
//私有静态方法
private static Singleton instance;
//共有的静态方法
public static Singleton getInstance() {
if(null == instance) {
instance = new Singleton();
}
return instance;
}
}
1.2懒汉式,线程安全
package cn.liu.syn;
public class Singleton {
//私有构造器
private Singleton(){}
//私有静态方法
private static Singleton instance;
//共有的静态方法
public static synchronized Singleton getInstance() {
if(null == instance) {
instance = new Singleton();
}
return instance;
}
}
1.3懒汉式,双检锁/双重校验锁(DCL,即 double-checked locking)
package cn.liu.syn;
//静态属性 没有volatile,可能访问到一个没有初始化的对象
private volatile static DoubleCheckedLocking instance;
//私有构造器
private DoubleCheckedLocking(){}
//提供公共的静态方法
public static DoubleCheckedLocking getinstance() {
if(instance!=null) {//已存在对象,避免不必要的同步。
return instance;
}
//线程安全
synchronized (DoubleCheckedLocking.class) {
if(null == instance) {
instance = new DoubleCheckedLocking();
}
return instance;
}
}
}
2.饿汉式,线程安全
package cn.liu.syn;
public class Singleton {
//私有构造器
private Singleton(){}
//私有静态方法
private static Singleton instance = new Singleton();
//共有的静态方法
public static synchronized Singleton getInstance() {
return instance;
}
}