什么是单例模式?
所谓类的单例设计模式,就是采取一定的方法,保证在整个的软件系统中对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
单例模式的实现步骤
1.构造器私有化;
2.创建或定义类对象;
3.提供获取该对象的静态方法。
下面就两种方式一一介绍:饿汉式/懒汉式
1.饿汉式
在类加载时就将对象创建好了。
class GirlFriend{
private String name;
//单例模式-饿汉式
//对象在类加载时提前创建好了,但不一定使用
//饿汉式可能造成资源的浪费
private static GirlFriend girlFriend = new GirlFriend("小红");
//构造器私有化
private GirlFriend(String name) {
this.name = name;
}
//提供公有方法来返回实例对象
//静态方法不创建对象就能调用,跳过了创建对象的步骤
public static GirlFriend getGirlFriend(){
return girlFriend;
}
//提供toString()方法
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
2.懒汉式
在使用该对象时进行创建。
//单例模式-懒汉式
//避免饿汉式中的资源浪费问题
class Cat{
private String name;
//1.构造器私有化
//2.定义一个Cat对象
//3.提供public方法创建并返回Cat对象
private static Cat cat;
private Cat(String name) {
this.name = name;
}
public static Cat getCat(){
if(cat == null){
cat = new Cat("小花");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
3.饿汉式vs懒汉式
1.饿汉式可能造成资源浪费,而懒汉式不存在资源浪费问题。
2.懒汉式存在线程安全问题,而饿汉式不会有线程安全问题。