黑马程序员技术交流社区

标题: 【一个程序系列】一个程序了解单例模式 [打印本页]

作者: xlunaer    时间: 2015-4-15 09:19
标题: 【一个程序系列】一个程序了解单例模式
  1. /**
  2. * 单例模式指我们的一个类仅有一个实例,并提供一个访问它的全局访问点。”
  3. *单利模式创建的步骤:1,私有化构造方法 2,创建一个实例对象的引用
  4. * 3,创建一个外部可以访问获取引用的方法。
  5. *
  6. * @author Alan
  7. *
  8. */
  9. public class Single {

  10.         public int x;

  11.         public int y;

  12.         /**
  13.          * 饿汉式:创建引用时同时创建对象,外部访问时可以直接获得实力对象
  14.          */

  15.         // 私有化构造方法
  16.         private Single() {
  17.         }

  18.         // 创建一个实例对象的引用,并创建对象
  19.         static Single s1 = new Single();

  20.         // 创建一个外部可以访问获取引用的方法。
  21.         public static Single instance1() {
  22.                 return s1;
  23.         }

  24.         /**
  25.          * 懒汉式:创建引用的时候不创建对象,等外部访问的时候再创建对象。
  26.          */
  27.         // 创建一个实例对象的引用,不创建对象
  28.         static Single s2 = null;

  29.         // 创建一个外部可以访问获取引用的方法。
  30.         public static Single instance2() {

  31.                 if (s2 == null) {
  32.                         // 此时才创建对象
  33.                         s2 = new Single();
  34.                 }
  35.                 return s2;
  36.         }

  37.         /**
  38.          * 在以后的多线程知识中可知:懒汉式是线程不安全的,当有两个线程运行到s2 = new Single();
  39.          * 有可能都会创建实例对象。所以需要同步操作,此时懒汉式应该这样写:
  40.          */

  41.         // 创建一个实例对象的引用,不创建对象
  42.         static Single s3 = null;

  43.         // 创建一个外部可以访问获取引用的方法。
  44.         public static Single instance3() {
  45.                 // 此时才创建对象
  46.                 if (s3 == null) {
  47.                         // 使用同步
  48.                         synchronized (Single.class) {
  49.                                 if (s3 == null) {
  50.                                         s3 = new Single();
  51.                                 }
  52.                         }
  53.                 }
  54.                 return s3;
  55.         }
  56.        
  57.         //建议使用饿汉式,不毛线。

  58. }
复制代码

单例模式有很多应用。比如说:我们上课,可能有七八十个学生,数学老师只要一个就可以了,这时候数学老师就可以使用单例模式。
写博客le,大家一起加油!!早日进黑马!!!




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