一、单例模式
1.对于整个软件系统中,对某个类只能有一个实例化对象。
2.单例类应该满足一下条件:
对于构造器是该类私有的 【自己创建类的实例】
只能有一个类的实例 【一般定义为私有静态的】
提供返回对象的共有方法 【外部可以通过这个方法创建或调用这个固定的实例】
二、饿汉式
特点:在程序启动或单例类被加载时,就会创建这个类的实例。
缺点:在每次加载类信息时就会创建对象,浪费空间资源。
☀️ 代码说明:
public class Test{
public static void main(String [] args){
//利用方法创建单例类对象
GirlFriend girlFriend = GrilFriend.getInstance();
/*
在加载类的信息时,就会创建这个唯一的单例类实例,通过getInstance
方法返回这个实例并赋值给对象名 girlFriend
*/
}
}
class GirlFriend{
private string name;
//私有化构造器
private GrilFriend(String name){
this.name = name;
}
//自己提供一个私有的静态实例
private static GirlFriend gf = new GrilFriend("小花");
//提供一个公有方法获取单例类实例
public static GirlFriend getInstance(){
return gf;
}
}
三、懒汉式
特点:程序只会创建一次单例类实例【在第一次访问单例类时】
缺点:线程是不安全的
⭐️ 代码说明:
public class Test{
public static void main(String [] args){
GrilFriend gf = GrilFriend.getInstance();
}
}
class GrilFriend{
private String name;
//私有化构造器
private GrilFriend(String name){
this.name = name;
}
private static GrilFriend gf = null;
public static GrilFriend getInstance(){
if(gf == null){
gf = new GrilFriend("西施");
}
return gf;
}
}
四、饿汉式与懒汉式的区别
(1)二者的主要区别在于对象的创建时机不同;饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才会创建
(2)饿汉式不存在线程问题,懒汉式存在线程安全问题
(3)饿汉式可能存在浪费资源的问题,因为如果没有使用这个创建的对象实例,那么就浪费了资源,懒汉式在使用创建对象实例