黑马程序员技术交流社区
标题:
今天学习了单例设计模式,听说面试很重要,有点问题。
[打印本页]
作者:
黑马小菜菜
时间:
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
单例模式用于保证在程序的运行期间某个类有且仅有一个实例。
饿汉式:
class SingleClass{
//将构造函数私有化,不允许在类的外部创建该类的实例
private SingleClass(){}
/*创建该类的实例,并将其私有化,
*该实例 需要在方法调用,因此也必须是静态的
*对象一创建,就进行初始化,这种叫做饿汉式
*/
private static SingleClass singleInstance = new SingleClass();
/*对外提供方法来获取该类的实例,该方法必须通过public修饰
*该方法只能被类名调用,因此,方法必须是静态的
*调用该方法是为了获取该类的实例,因此,该方法的返回值类型是该类类型*/
public static SingleClass getInstance(){
return singleInstance;
}
}
懒汉式
class SingleClass{
private SingleClass(){}
private static SingleClass singleInstance =null;
public static SingleClass getInstance(){
/*如果对象为null,才创建*/
if (singleInstance == null)
singleInstance = new SingleClass();
return singleInstance;
}
}
懒汉式的线程安全问题
public static SingleClass getInstance(){
//这里会牵涉到线程安全问题,在保证同步的情况下注重效率
//在此处判断一次,若已经创建实例,就不在判断锁,稍微提高效率
if(singleInstance ==null) {
//此处加锁,保证只有一个线程创建实例
synchronized(SingleClass.class){
if (singleInstance == null)
singleInstance = new SingleClass();
}
}
return singleInstance;
}
复制代码
作者:
梦里听传说
时间:
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