-
所谓单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
-
单例模式有两种方式:
-
饿汉式:
-
步骤:
-
构造器私有化
-
类内部创建对象
-
向外暴露一个静态的公共方法
-
代码实现
-
-
-
/**
* @author caicai
* 饿汉式单例设计模式
*/
public class SingleTon01 {
public static void main(String[] args) {
GirlFriend girlFriend = GirlFriend.getGirlFriend();
System.out.println(girlFriend);
}
}
class GirlFriend {
private String name;
// 1.私有化构造器
private GirlFriend(String name) {
this.name = name;
}
// 2.类内部创建对象
private static GirlFriend girlFriend = new GirlFriend("小红");
// 3.向外暴露一个静态的公共方法
public static GirlFriend getGirlFriend() {
return girlFriend;
}
@Override
public String toString() {
return "GirlFriend{" +
"name='" + name + '\'' +
'}';
}
}
懒汉式(存在线程安全问题)
-
步骤:
-
私有化构造器
-
定义一个static的静态属性对象
-
提供一个public的static方法,可以返回一个Cat对象
-
只有当用户使用getInstance时,才返回cat对象,后面再次调用时,会返回上次创建的对象,从而保证了单例
-
/**
* @author caicai
* 懒汉式的单例模式
*/
public class SingleTon02 {
public static void main(String[] args) {
System.out.println(Cat.n1);
Cat cat = Cat.getInstance();
System.out.println(cat);
Cat cat1 = Cat.getInstance();
System.out.println(cat1);
}
}
// 希望在程序运行过程中,只能创建一个Cat对象
class Cat {
private String name;
public static int n1 = 10;
// 1.私有化构造器
private Cat(String name) {
this.name = name;
}
// 2.定义一个static的静态属性对象
private static Cat cat; // 默认是null
// 3.提供一个public的static方法,可以返回一个Cat对象
public static Cat getInstance() {
if (cat == null) { // 如果还没有创建cat
cat = new Cat("小猫猫");
}
return cat;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}