Android(java)学习笔记78:设计模式之单例模式

单例模式代码示例:

 

单例模式之饿汉式

 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,cn.itcast_03.Student@175078b

26         System.out.println(s2);// null,cn.itcast_03.Student@175078b

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); // cn.itcast_03.Teacher@175078b

 9         System.out.println(t2);// cn.itcast_03.Teacher@175078b

10     }

11 }

 

你可能感兴趣的:(android)