黑马程序员技术交流社区

标题: 今天学习了单例设计模式,听说面试很重要,有点问题。 [打印本页]

作者: 黑马小菜菜    时间: 2014-10-3 10:11
标题: 今天学习了单例设计模式,听说面试很重要,有点问题。
1.饿汉式和懒汉式傻傻分不清楚。
2.那三个步骤中的private static 也有点看不懂。。。
不知道为什么加private私有,为什么加static 静态。。。

我是不是不适合学习JAVA???
作者: 杨佳名    时间: 2014-10-3 10:22
刚开始学习都这样,等楼主过段时间返回来看,就熟悉了。
1.饿汉式与懒汉式,我的理解就是,饿汉式很饥渴,急着加载对象。懒汉式很懒,延迟加载,所以在多了一层if判断。
2.目的是保证对象的唯一性,而你怎么创建对象的不需要对外提供出去,所以用private修饰。static 确保只在类加载的时候才初始化一次,再加上private 这样就始终只有一个这样的对象了


作者: daoqin    时间: 2014-10-3 10:31
自信点!
作者: 白金角斗士    时间: 2014-10-3 10:36
加油!前进的路上没有终点
作者: 付江涛    时间: 2014-10-3 10:37
和你说吧,我最开始看的时候也不懂,只是知道有个饿汉式和懒汉式,然后继续往后学,后来看资料无意中看到饿汉式和懒汉式两个词,我还想我到底学过这个东西没有,怎么一点印象都没有。再后面学到多线程的时候,毕老师老师又重新讲了一下单例,才明白了原来这么回事。
韩顺平老师说过,学习的时候可以适当地囫囵吞枣。不要死转牛角尖。张老师的视频里有几句话也说的很好,意思就是,你得坚持往后学,学了高级的知识以后你才知道一些基础的东西怎么用,不然你怎么也搞不明白。但一定要适当,不要碰到难点就略过。
作者: 北风    时间: 2014-10-3 10:54
二楼正解。其实这个东西不是非要你一字不差的把老师讲的都记住,只需要理解了其设计思想,然后能够说出几个关键的知识点和核心思想就可以。另外在加上你的世纪代码编写能力很强,就大功告成了。
作者: 千里马    时间: 2014-10-3 11:02
知识的积累不是一两天可以解决的问题,还是得坚持和慢慢,其实很多人都是刚开始学习时有这样感慨是难免的,加油吧!
作者: wez924612    时间: 2014-10-3 11:14
哈哈,你加油吧,等我进去了我把你给我的都还你。
作者: 小城。    时间: 2014-10-3 13:11
看了好多人都问到这个了。
作者: JerryJava    时间: 2014-10-3 14:12
付江涛 发表于 2014-10-3 10:37
和你说吧,我最开始看的时候也不懂,只是知道有个饿汉式和懒汉式,然后继续往后学,后来看资料无意中看到饿 ...

版主英明!过谦了:lol
作者: 戏言丶    时间: 2014-10-3 14:17
这个在前门不要过多的伤脑筋,后面还会讲到的,还会结合实际例子来说。所以不懂的不需要花太多的时间去纠结他,后面看得多了有些东西自然而然的就明白了
作者: ye361571404    时间: 2014-10-3 20:06
主要还是不熟悉java,敲多了熟练后就很容易理解了
作者: 笑脸迷人    时间: 2014-10-3 20:12
楼主加油,我们开始都是这样的~
作者: alpha.huai    时间: 2014-10-4 02:25
饿 懒 好像说的单例模式
作者: 18643448863    时间: 2014-10-4 06:47
哈哈 我们的进度差不多嘛,有可能会成为同期哦,加油吧
作者: asdf19910719    时间: 2014-10-4 10:05
刚开始都是这样,我也一样,但是只要继续学下去有了积淀和感觉,这些就很容易懂了

作者: date1130    时间: 2014-10-4 10:42
加油吧,有时候坚持才是最可贵的。
作者: 在学野马    时间: 2014-10-4 10:44
不要气馁 相信自己
作者: 张业婷    时间: 2014-10-4 10:51
没什么难的对看看基础的是频加油
作者: 646245771    时间: 2014-10-6 09:57
有些时候不要钻牛角尖,你可以学习后面的视频,后面的视频看完一遍,前面的有些知识点不懂的,后面视频看完之后,有些知识点自然而然就懂了,太过于抓住一个知识点不放,你的学习方式不对:L
作者: 杜工    时间: 2014-10-6 10:40
单例模式都是将构造函数私有化,只对外提供一个获取对象的方法。private起到禁止其它程序创建该对象的作用。static修饰的最先加载,先初始化。
作者: 嘿~~    时间: 2014-10-6 14:10
  1. 单例模式用于保证在程序的运行期间某个类有且仅有一个实例。
  2. 饿汉式:
  3. class  SingleClass{
  4.        
  5.          //将构造函数私有化,不允许在类的外部创建该类的实例
  6.         private SingleClass(){}
  7.         /*创建该类的实例,并将其私有化,
  8.         *该实例 需要在方法调用,因此也必须是静态的
  9.         *对象一创建,就进行初始化,这种叫做饿汉式
  10. */
  11.         private static SingleClass singleInstance = new SingleClass();
  12.         /*对外提供方法来获取该类的实例,该方法必须通过public修饰
  13.         *该方法只能被类名调用,因此,方法必须是静态的
  14.         *调用该方法是为了获取该类的实例,因此,该方法的返回值类型是该类类型*/
  15.         public static SingleClass getInstance(){
  16.                 return singleInstance;
  17.         }
  18. }
  19.        
  20. 懒汉式
  21.        
  22. class  SingleClass{

  23.         private SingleClass(){}
  24.        
  25.         private static SingleClass  singleInstance  =null;
  26.        
  27.         public static SingleClass getInstance(){
  28.        
  29.                 /*如果对象为null,才创建*/
  30.                 if (singleInstance == null)
  31.                         singleInstance = new SingleClass();
  32.                
  33.                 return singleInstance;

  34.         }
  35. }


  36. 懒汉式的线程安全问题
  37. public static SingleClass getInstance(){
  38. //这里会牵涉到线程安全问题,在保证同步的情况下注重效率
  39.                 //在此处判断一次,若已经创建实例,就不在判断锁,稍微提高效率
  40.                 if(singleInstance ==null) {
  41.                         //此处加锁,保证只有一个线程创建实例
  42.                         synchronized(SingleClass.class){
  43.                                 if (singleInstance == null)
  44.                                         singleInstance = new SingleClass();
  45.                         }
  46.                 }
  47.                 return singleInstance;
  48. }
复制代码

作者: 梦里听传说    时间: 2014-10-6 17:36
单例设计模式 就是保证该类在程序中只能存在一个对象,所以不能让别人实例化该类,所以要私有化(private)该类的构造函数,但是你要为别人提供一个该类的唯一对象,所以你要在该类中定义一个静态的方法返回本类对象。

饿汉呢就好比一个人非常饿迫不及待的上来就在本类中new了一个对象并返回,懒汉正好想反,什么时候饿了(在被调用时)才创建该对象并返回,也就是延迟加载。
    这是我对单例的理解希望对你有用
作者: 残羹夜宴丶    时间: 2014-10-7 09:46
不要急不要急,稍微往后面学一点再看这一点就懂了。
作者: new999    时间: 2014-10-7 10:00
static修饰的在类加载时初始化,只初始化一次
作者: 18334705181    时间: 2014-10-7 18:13
懒汉式是因为刚开始的时候需要判断才会去建立这个对象,所以有点慢,至于加私有呢,那是因为要控制其他的类建立这个类的对象,所以需要私有化这个类的构造函数
作者: 〆_、Wali    时间: 2014-10-7 19:49
我晕,这次刚开始嘛!这么快就否定自己了?
作者: MR.Sun    时间: 2014-10-7 21:25
记不住  就拼命记住为止!




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