单例模式

158 阅读1分钟

饿汉模式

public class singletonPattern {
    // 饿汉式,在加载类的同时就创建好了类的唯一对象
    public static void main(String[] args) {
        GirlFriend girlFriend = GirlFriend.getGirlFriend();
        GirlFriend girlFriend1 = GirlFriend.getGirlFriend();
        if (girlFriend1 == girlFriend) {
            System.out.println("指向同一个对象");
        }
    }
}

class GirlFriend {
    private String name;

    private static GirlFriend girlFriend = new GirlFriend("李同学");

    private GirlFriend(String name) {
        this.name = name;
    }

    public static GirlFriend getGirlFriend() {
        return girlFriend;
    }
}

懒汉模式

public class singletonPattern1 {
    // 懒汉式的单例模式,为避免调用类的静态对象时创建对象而浪费资源,
    // 只在调用返回对象的静态方法时才创建对象
    public static void main(String[] args) {
        GirlFriend1 girlFriend1 = GirlFriend1.getGirlFriend1();
    }
}

class GirlFriend1 {
    private String name;
    private static GirlFriend1 girlFriend1;

    private GirlFriend1(String name) {
        this.name = name;
    }

    public static GirlFriend1 getGirlFriend1() {
        if (girlFriend1 == null) {
            girlFriend1 = new GirlFriend1("陈同学");
        }
        return girlFriend1;
    }
}

懒汉模式和饿汉模式区别

  • 饿汉模式:对象在类被加载时创建。懒汉模式:对象在调用静态获取对象方法的时候创建
  • 饿汉模式容易浪费对象空间,因为类被加载,不一定要去创建对象。
  • 多线程的情况下,懒汉模式可能会出现多个线程同时进入到构建对象的代码块,从而创建多个对象,这将破坏单例模式中一个类只能有一个对象的规矩。