设计模式基础(四)

2019-03-13  本文已影响0人  Maxinxx

单例模式之饿汉式

public class Student {
    //构造私有
    private Student() {}
    
    //自己造一个对象
    //静态方法只能访问静态成员变量,加静态
    //为了不让外界直接访问修改这个值,加private
    private static Student s = new Student();
    
    //提供公共的访问方式
    //为了保证外界能够直接使用该方法,加静态
    public static Student getStudent() {
        return s;
    }
}

创建两个对象,如果最后打出来的是true,表示这两个对象是指向同一个对象的,实际上还是一个对象;如果是false,表示,确实创建了两个对象。

public class StudentDemo {
    public static void main(String[] args) {
        Student s1 = Student.getStudent();
        Student s2 = Student.getStudent();
        System.out.println(s1 == s2);
    }
}

单例模式之懒汉式

public class Teacher {
    private Teacher() {}
    
    private static Teacher t = null;
    
    //面试时记得加synchronized
    public synchronized static Teacher getTeacher() {
        if(t == null) {
            t = new Teacher();
        }
        return t;
    }
}
public class TeacherDemo {
    public static void main(String[] args) {
        Teacher t1 = Teacher.getTeacher();
        Teacher t2 = Teacher.getTeacher();
        
        System.out.println(t1 == t2);
        System.out.println(t1);
        System.out.println(t2);
    }
}
面试题:单例模式的思想是什么?写一个代码体现。

开发:饿汉式(是不会出问题的单例模式)
面试:懒汉式(是可能会出问题的单例模式)

  1. 懒加载(延迟加载)
  2. 线程安全问题
    a. 是否多线程环境(可以是)
    b. 是否有共享数据(是)
    c. 是否有多条语句操作共享数据(是)
上一篇 下一篇

猜你喜欢

热点阅读