A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高泳 中级黑马   /  2014-9-24 23:11  /  946 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 设计模式:解决某一类问题最行之有效的方法。
  3. java中23种设计模式
  4. 单例设计模式:解决一个类在内存中只存在一个对象。
  5. */

  6. /*
  7. 1,为了避免其他程序过多简历该类对象,先禁止其他程序建立该对象。
  8. 2,还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
  9. 3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。

  10. 代码体现:
  11. 1,将构造函数私有化。
  12. 2,在类中创建一个本类对象。
  13. 3,提供方法可以获取到该对象。
  14. */
  15. class Single_1     //饿汉式
  16. {
  17.         private int num;
  18.        
  19.         public void setNum(int num)
  20.         {
  21.                 this.num = num;
  22.         }
  23.         public int getNum()
  24.         {
  25.                 return this.num;
  26.         }
  27.         private Single_1(){}
  28.         private static Single_1 s = new Single_1();

  29.         public static Single_1 getInstance()
  30.         {
  31.                 return s;
  32.         }
  33. }

  34. class Single_2     //懒汉式
  35. {
  36.         private int num;
  37.        
  38.         public void setNum(int num)
  39.         {
  40.                 this.num = num;
  41.         }
  42.         public int getNum()
  43.         {
  44.                 return this.num;
  45.         }
  46.         private Single_2(){}
  47.         private static Single_2 s = null;

  48.         public static Single_2 getInstance()
  49.         {
  50.                 if(s == null)
  51.                 {
  52.                         synchronized(Single_2.class)
  53.                         {
  54.                                 if(s == null)
  55.                                         s = new Single_2();
  56.                         }
  57.                 }               
  58.                 return s;
  59.         }
  60. }

  61. class SingleDemo
  62. {
  63.         public static void main(String[] arg)
  64.         {
  65.                 Single_1 s1 = Single_1.getInstance();
  66.                 Single_1 s2 = Single_1.getInstance();
  67.                 System.out.println(s2.getNum());
  68.                 s1.setNum(30);
  69.                 System.out.println(s2.getNum());
  70.                 Single_2 s3 = Single_2.getInstance();
  71.                 Single_2 s4 = Single_2.getInstance();
  72.                 System.out.println(s4.getNum());
  73.                 s3.setNum(30);
  74.                 System.out.println(s4.getNum());
  75.         }
  76. }
复制代码

2 个回复

倒序浏览
懒汉式的双检测性能不好,你可以考虑一下静态内部类,也可以实现单例
回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-9-24 23:25:01
藤椅
我也看到这了,觉得好奇妙啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马