黑马程序员技术交流社区

标题: 单例设计模式,如不足请同学们补充,相互学习 [打印本页]

作者: 魏诚东    时间: 2014-8-12 12:39
标题: 单例设计模式,如不足请同学们补充,相互学习
  1. package cn.itheima;
  2. /*
  3.         单例设计模式:解决一个类在内存中只存在一个对象
  4.         体现方式:
  5.                 1. 构造函数私有化
  6.                 2. 在类中创建一个本类对象
  7.                 3. 提供一个方法获取该对象

  8. */

  9. //饿汉式:先初始化对象,类一进内存就创建好了对象
  10. class HungrySingleton{
  11.        
  12.         private static final HungrySingleton s = new HungrySingleton();
  13.         private HungrySingleton(){}
  14.        
  15.         public static HungrySingleton getInstance(){
  16.                
  17.                 return s;
  18.         }
  19. }

  20. /*
  21. 懒汉式:对象是方法被调用时才初始化,也叫做对象的延迟加载
  22. 懒汉式考点:
  23.         1. Q:懒汉式和饿汉式有什么不同                A:懒汉式的特点在于实例延迟加载
  24.         2. Q:懒汉式延迟加载有什么问题                A:如果多线程访问会出现安全问题
  25.         3. Q:安全问题怎么解决                                A:加同步代码块或同步函数解决,但有可能程序低效,可以采用双重判断解决效率问题
  26.         4. Q:加同步使用的锁是哪一个                        A:该类所属的字节码文件对象,LazySingleton.class
  27. */
  28. class LazySingleton{
  29.        
  30.         private static LazySingleton s = null;
  31.         private LazySingleton(){}
  32.        
  33.         public static LazySingleton getInstance(){
  34.                
  35.                 if (s==null){
  36.                        
  37.                         synchronized(LazySingleton.class){
  38.                                
  39.                                 if (s==null){
  40.                                        
  41.                                         s = new LazySingleton();
  42.                                 }
  43.                         }
  44.                 }
  45.                
  46.                 return s;
  47.         }
  48. }


  49. class SingletonDemo{
  50.        
  51.         public static void main(String[] args){
  52.                
  53.                 HungrySingleton s = HungrySingleton.getInstance();
  54.                 HungrySingleton s1 = HungrySingleton.getInstance();
  55.                
  56.                 LazySingleton s3 = LazySingleton.getInstance();
  57.                 LazySingleton s4 = LazySingleton.getInstance();
  58.                
  59.                 System.out.println(s==s1);
  60.                 System.out.println(s3==s4);
  61.         }
  62. }
复制代码



作者: 画了一个圈儿    时间: 2014-8-13 09:17
学习笔记。。。
作者: 黑马-胡明    时间: 2014-8-13 13:09
线程中 比较实用吧
作者: chengzhx76    时间: 2014-8-13 13:14
有次面试让手写单例模式。。。最好还是要理解,如 为什么要用单例模式,单例模式的好处。。等等。。。
作者: 魏诚东    时间: 2014-8-13 16:48
chengzhx76 发表于 2014-8-13 13:14
有次面试让手写单例模式。。。最好还是要理解,如 为什么要用单例模式,单例模式的好处。。等等。。。 ...

嗯,必须要理解。学习过程中记录的学习笔记
作者: 执笔梦    时间: 2014-8-15 11:51
学习学习.




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