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 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。