黑马程序员技术交流社区

标题: 单例设计模式 饿汉式 [打印本页]

作者: fmi110    时间: 2015-9-12 09:50
标题: 单例设计模式 饿汉式
a
  1. class Student{
  2.         private String name;
  3.         private int age;
  4.         Student(){}
  5. }

  6. /**饿汉式
  7. class Singleton {

  8. //       
  9. //         * 单例设计模式:保证内存中只有一个对象
  10. //         *
  11. //         * 如何保证内存中只有一个对象?
  12. //         *          1 把构造函数私有化
  13. //         *          2 在成员位置自己创建一个对象
  14. //         *          3 通过一个公共方法提供对对象的访问
  15. //         
  16.         private Singleton(){}//私有化构造函数,使之无法从外部创建对象
  17.         private  static Student s = new Student();//创建一个对象,静态保证内存中只有一个
  18.                                                                                         //私有化防止被外部更改
  19.         //提供访问方法
  20.         public static Student getStudent(){ //因为构造函数私有化,所以方法只能定义成静态,通过函数名调用
  21.                 return s;
  22.         }

  23. }
  24. */
  25. //懒汉式
  26. class  Singleton{
  27.         private static Student s = null;
  28.         //私有化构造函数,则成员变量和成员函数都只能是静态修饰static
  29.        
  30.         private Singleton(){}
  31.        
  32.         //提供访问接口,由于存在多线程同时访问的情况,所以需要同步
  33.         public static synchronized Student getStudent(){
  34.                 //判断是否已有进程建立对象
  35.                 if(s == null)
  36.                         s = new Student();
  37.                 return s;
  38.         }
  39. }



  40. class Test{
  41.         public static void main(String[] args) {
  42.                 Student s1 = Singleton.getStudent();
  43.                 Student s2 = Singleton.getStudent();
  44.                 System.out.println(s1 == s2);//true
  45.         }
  46. }
复制代码



作者: Wqi    时间: 2015-9-12 11:27
懒汉的锁呢.....
作者: fmi110    时间: 2015-9-12 11:36
Wqi 发表于 2015-9-12 11:27
懒汉的锁呢.....

Singleton.class   在同步代码块传递锁对象时,传递Singleton.class
静态同步方法的锁就是类的字节码文件  类名.class
作者: 天涯莫名    时间: 2015-9-12 21:27
单例模式,支持!
作者: 然后呢8908    时间: 2015-9-12 21:59
嗯,写得很好。
作者: 小二儿    时间: 2015-9-12 22:23
赞一个,加油
作者: forjunjian    时间: 2015-9-12 22:51
Wqi 发表于 2015-9-12 11:27
懒汉的锁呢.....

有锁了 在函数那里




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2