单例模式(Singleton Pattern)是Java中 最简单的设计模式之一。
这种模式涉及到一个 单一的类,该类负责创建自己的对象,同时确保只有 单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问, 不需要实例化该类的对象。
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
一个人只有一个嘴巴,当你说话时(调用方法时)永远只能使用一个嘴巴,如果不使用单例设计模式,每一次说话都会多出来一张嘴(实例化一个对象),这就不合理且占用资源
最基础
懒汉时懒汉两字就代表了一切,当真正用到时才临时泡佛脚
public class Singleton{
private static singleton = null;
public getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
private Singleton(){
//私有无参构造器,只允许内部调用
}
}
我们可以看出,只有在使用时才会进行实例化,就是懒汉式
同上两字就代表了一切,加载时就实例化类
public class Singleton{
private static singleton = new Singleton();
public getSingleton(){
return singleton;
}
private Singleton(){
//私有无参构造器,只允许内部调用
}
}
只要整个项目加载就会进行实例化,就想一个人饿了,不管三七二十一,先吃了再说
懒汉式不浪费内存,但线程不安全(多线程获取时,可能会示例话多个对象,因为可能有多个线程同时通过if判断)
饿汉式浪费内存,但线程安全
解决线程安全:
public class Singleton{
static{
singleton = new Singleton();
}
private static singleton;
public getSingleton(){
return singleton;
}
private Singleton(){
//私有无参构造器,只允许内部调用
}
}
为什么要使用静态块?
因为静态块只会在类加载时调用一次,详细见jvm底层
Original: https://www.cnblogs.com/microdream2/p/15365013.html
Author: MD&One-AR
Title: 《二十三种设计模式》通俗的创建型之单例设计模式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578822/
转载文章受原作者版权保护。转载请注明原作者出处!