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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 980344791 中级黑马   /  2014-10-8 22:54  /  1418 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是懒汉式什么是饿汉式,什么情况下使用。。

点评

如果初期不是很理解 可适当跳过继续向后学习  发表于 2014-10-9 07:36

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

7 个回复

倒序浏览
单例设计模型在java中的思想就是在一个内存中一个类,只建立一个对象,其他程序只能该对象提供公有方法调用这个对象提供的去解决问题。以避免其他程序大量建立对象而造成内存浪费。
说白了就是利用pribate把类的属性私有化,再加static使对象达到唯一的效果,当然中间还有点小技巧。先给饿汉和懒汉的定义方式:
//懒汉式
class Single2{

        //声明本类的引用类型变量,但是不创建本类的对象。
        private static        Single2 s;
       

        //私有化构造函数
        private Single2(){
        }

        //
        public static Single2 getInstance(){
                if(s==null){
                        //没有创建就先创建本类对象
                        s = new Single2();
                }
                return s;
        }
       

}



//饿汉式
class Single{

        //声明本类的引用类型变量指向本类的对象。
        private        static        Single s = new Single();
       
        //第一步:私有化构造函数
        private Single(){}
       
        //提供有一个公共静态的方法获取本类的对象
        public static Single getInstance(){
                return s;
        }

}
饿汉单例模式:

        1. 私有化构造函数。
        2. 在本类中创建该类的对象,并且使用一个私有静态的变量指向。
        3. 提供有一个公共静态的方法获取本类的对象。

懒汉单例设计模式:
        1. 私有化构造函数。       
        2. 声明本类的引用类型变量,但是不创建本类的对象。
        3. 提供一个公共静态的方法获取本类的对象,获取对象之前先判断是否已经创建了该类的对象
        如果没有创建,那么创建该类的对象并返回,如果已经创建了该类的对象,那么就直接返回即可。
看上面两种方式的设计步骤,就可以明白,饿汉式和懒汉式的区别在于加载class文件有没有在建立对象。饿汉式在虚拟机加载class文件的时候创建对象,等待其他程序的调用(相当于在还没有饥饿的时候,粮食就准备好了)。而懒汉式是虚拟加载class文件的时候不创建对象,等其他程序第一次调用对象才创建对象(就感觉有点懒,等到饥饿的时候才开始去寻觅粮食,所以叫懒汉)。
由于懒汉式在有程序调用对象的时候才创建对象,所以有可能引发线程安全问题。一般推荐用饿汉单例模式!
哈哈 今天老师刚好讲到。献丑了!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上的解答不错
回复 使用道具 举报
还是延迟加载模式听着好听,考察的也多,
回复 使用道具 举报
youtianlong123 来自手机 中级黑马 2014-10-10 16:44:09
报纸
学习了!!
回复 使用道具 举报
学习受教啊
回复 使用道具 举报
这个在多线程中访问共享资源的时候应该很有用的,这个模式我还在细细揣摩啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马