单例模式——饿汉式
步骤【单例模式 - 饿汉式】
1.将构造器私有化
2.在类的内部直接创建对象(该对象是static)
3.提供一个公共的static方法,返回gf对象
class GirlFriend{
private String name;
private static GirlFriend gf = new GirlFriend("小红红");
private GirlFriend(String name) {
this.name = name;
}
public static GirlFriend getInstance(){
return gf;
}
}
public static void main(String[] args) {
//通过方法直接获取对象
GirlFriend instance = GirlFriend.getInstance();
System.out.println(instance);
//两次对象是相同的
GirlFriend instance2 = GirlFriend.getInstance();
System.out.println(instance2);
}
单例模式——懒汉式
步骤
1.构造器私有化
2.定义一个static静态属性对象
3.提供一个public的static方法,可以返回一个Cat对象
4.懒汉式,只有当用户使用getInstance()时,才返回cat对象,后面再次调用时,会返回上次创建的cat对象,保证了单例
class Cat{
private String name;
private static Cat cat;
private Cat(String name) {
this.name = name;
}
public static Cat getInstance(){
if(cat == null){
cat = new Cat("小可爱");
}
return cat;
}
}
public static void main(String[] args) {
Cat instance = Cat.getInstance();
System.out.println(instance);
//再次调用getInstance
Cat instance2 = Cat.getInstance();
System.out.println(instance2);
}
总结
单例模式实现的两种方式 ①饿汉式 ②懒汉式
饿汉式问题:在类加载时候就创建,可能存在资源浪费问题
懒汉式问题:线程安全问题