单例模式代码示例:
单例模式之饿汉式:
1 package cn.itcast_03; 2 3 public class Student { 4 // 构造私有 5 private Student() { 6 } 7 8 // 自己造一个 9 // 静态方法只能访问静态成员变量,加静态 10 // 为了不让外界直接访问修改这个值,加private 11 private static Student s = new Student(); 12 13 // 提供公共的访问方式 14 // 为了保证外界能够直接使用该方法,加静态,不加static,外界就必须创建一个对象,显然这里是不容许的 15 public static Student getStudent() { 16 return s;//这里是原子性操作,不是多条语句操作共享数据,所以开发的时候,我们用饿汉式,会比较安全(开发时候会常涉及到多线程) 17 } 18 }
1 package cn.itcast_03; 2 3 /* 4 * 单例模式:保证类在内存中只有一个对象。 5 * 6 * 如何保证类在内存中只有一个对象呢? 7 * A:把构造方法私有 8 * B:在成员位置自己创建一个对象 9 * C:通过一个公共的方法提供访问 10 */ 11 public class StudentDemo { 12 public static void main(String[] args) { 13 // Student s1 = new Student(); 14 // Student s2 = new Student(); 15 // System.out.println(s1 == s2); // false 16 17 // 通过单例如何得到对象呢? 18 19 // Student.s = null; 20 21 Student s1 = Student.getStudent(); 22 Student s2 = Student.getStudent(); 23 System.out.println(s1 == s2); 24 25 System.out.println(s1); // null,[email protected] 26 System.out.println(s2);// null,[email protected] 27 } 28 }
单例模式之懒汉式:
1 package cn.itcast_03; 2 3 /* 4 * 单例模式: 5 * 饿汉式:类一加载就创建对象 6 * 懒汉式:用的时候,才去创建对象 7 * 8 * 面试题:单例模式的思想是什么?请写一个代码体现。 9 * 10 * 开发:饿汉式(是不会出问题的单例模式) 11 * 面试:懒汉式(可能会出问题的单例模式) 12 * A:懒加载(延迟加载) 13 * B:线程安全问题 14 * a:是否多线程环境 是 15 * b:是否有共享数据 是 16 * c:是否有多条语句操作共享数据 是 17 */ 18 public class Teacher { 19 private Teacher() { 20 } 21 22 private static Teacher t = null; 23 24 public synchronized static Teacher getTeacher() { 25 // t1,t2,t3 26 if (t == null) {//多条语句操作共享数据 27 //t1,t2,t3 28 t = new Teacher(); 29 } 30 return t; 31 } 32 }
1 package cn.itcast_03; 2 3 public class TeacherDemo { 4 public static void main(String[] args) { 5 Teacher t1 = Teacher.getTeacher(); 6 Teacher t2 = Teacher.getTeacher(); 7 System.out.println(t1 == t2); 8 System.out.println(t1); // [email protected] 9 System.out.println(t2);// [email protected] 10 } 11 }
时间: 2024-11-13 09:47:51