单例模式:单个实例模式,采取一定方法保证在整个软件系统中,一个类只能有一个对象实例,并且该类只提供一个取得其对象实例的方法。
1-->饿汉式
public class Test {
public static void main(String[] args){
System.out.println(GirlFriend.info());
}
}
public class GirlFriend {
//单例模式:饿汉式
//1、私有构造器,保证一个类只有一个对象
//2、创建对象,在类的内部直接创建
//3、提供一个公共的static方法,返回对象
private String name;
private GirlFriend(String name){
this.name = name;
}
private static GirlFriend xh = new GirlFriend("小红");
public static GirlFriend info(){
return xh;
}
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
2-->懒汉式
public class TestBB {
public static void main(String[] args){
System.out.println(BB.info());
}
}
public class BB {
//单例模式:懒汉式
//1、构造器私有
//2、创建静态对象
//3、创建方法实现 需要时才创建实例化对象
private String name;
private BB(String name){
this.name = name;
}
private static BB bb;
public static BB info(){
if(bb == null){
bb = new BB("小蓝");//只有调用该方法并当bb没有创建实例化对象时,才会调用
}
return bb;
}
public String toString(){
return "BB{" +
"name='" + name +"\'" +
'}';
}
}
饿汉式,懒汉式区别:
1、创建时机不同:饿汉式在类加载时就创建对象实例,而懒汉式是在使用时才创建
2、饿汉式存在资源浪费问题,只要是类加载就会创建实例,而不管是否使用。
3、饿汉式不存在线程安全问题,懒汉式存在线程安全问题