java 单例模式(饿汉模式和懒汉模式)

    二者最主要的区别在于创建对象的时机不同: 饿汉模式是在类加载时就创建了对象实例,而懒汉模式是在使用时才创建(也就是调用获取实例对象方法时才创建) 饿汉模式不存在线程安全问题,懒汉模式存在线程安全问题 饿汉模式存在浪费资源的可能. 在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式
public class SingleTon01 {
          
   
    public static void main(String[] args) {
          
   
        GirlFriend gf1 = GirlFriend.getGf();
        GirlFriend gf2 = GirlFriend.getGf();
        //true
        System.out.println(gf1 == gf2);

        Cat cat1 = Cat.getCat();
        Cat cat2 = Cat.getCat();
        //true
        System.out.println(cat1 == cat2);
    }
}


/**
 * 单例模式-饿汉模式
 * 在类加载的时候就会创建对象
 */
class GirlFriend {
          
   
    public String name;

    private static GirlFriend gf = new GirlFriend("小红");

    public static GirlFriend getGf() {
          
   
        return gf;
    }

    /**
     * 构造器私有化,不能在本类之外new
     * @param name
     */
    private GirlFriend(String name) {
          
   
        this.name = name;
    }

    @Override
    public String toString() {
          
   
        return "GirlFriend{" +
                "name=" + name +  +
                };
    }
}

/**
 * 单例模式-懒汉模式
 * 1.构造器私有化
 * 2.提供一个static静态属性对象
 * 3.提供一个public的static方法,返回一个实例对象
 * 4.懒汉模式,只有在用户调用方法时,才会创建对象,之后再次调用,返回的是同一对象
 */
class Cat {
          
   
    private String name;

    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 +  +
                };
    }
}
经验分享 程序员 微信小程序 职场和发展