1.1基本概念
单例模式是一个设计模式,确保一个类只有一个实例,并提供一个全局访问点
场景:需要严格控制资源访问(数据库连接池,配置文件读取)
避免资源浪费和冲突
1.2实现方法
单例模型的实现方法分为:懒汉式,饿汉式
1.3饿汉式
饿汉式:在启动程序时,无论是否被使用,进行单例对象的初始化,
不需要线程安全
优点
不考虑多线程环境下的线程安全
缺点
浪费系统资源
代码
java
package sigletondemo;
//单例模式
//饿汉式
public class Singleton {
//定义静态
private static Singleton instance = new Singleton();
//私有的,构造方法
private Singleton(){}
//调用
public static Singleton getInstance(){
return instance;
}
}
Text
java
package sigletondemo;
public class Text1 {
public static void main(String[] args) {
//Singleton singleton = new Singleton();
// 实例化一个singleton对象,用private定义,在类外,无法调用
Singleton singleton = Singleton.getInstance();//只能通过类名调用
//饿汉式 验证
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2);
}
}
1.4懒汉式
懒汉式:延迟加载,随用随取,
需要线程安全
优点
节省资源,只有需要的时候才开始初始化
缺点
在多线程环境下,可能会出现竞态条件,需要额外的线程安全,
代码(还需优化)
java
package sigletondemo;
//单例模式
//懒汉式,线程不安全
public class Singleton2 {
//无赋值
private static Singleton2 instance;
private Singleton2(){}
public static Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
Text
java
package sigletondemo;
public class Text2 {
public static void main(String[] args) {
//Singleton singleton = new Singleton();
// 实例化一个singleton对象,用private定义,在类外,无法调用
Singleton2 singleton = Singleton2.getInstance();//只能通过类名调用
//懒汉式 验证
Singleton2 singleton1 = Singleton2.getInstance();
Singleton2 singleton2 = Singleton2.getInstance();
System.out.println(singleton1 == singleton2);
}
}