黑马程序员技术交流社区

标题: 关于单列设计模型 [打印本页]

作者: 980344791    时间: 2014-10-8 22:54
标题: 关于单列设计模型
什么是懒汉式什么是饿汉式,什么情况下使用。。
作者: mudao    时间: 2014-10-8 23:52
单例设计模型在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文件的时候不创建对象,等其他程序第一次调用对象才创建对象(就感觉有点懒,等到饥饿的时候才开始去寻觅粮食,所以叫懒汉)。
由于懒汉式在有程序调用对象的时候才创建对象,所以有可能引发线程安全问题。一般推荐用饿汉单例模式!
哈哈 今天老师刚好讲到。献丑了!
作者: 戏言丶    时间: 2014-10-9 00:41
楼上的解答不错
作者: 刘挺    时间: 2014-10-10 16:34
还是延迟加载模式听着好听,考察的也多,
作者: youtianlong123    时间: 2014-10-10 16:44
学习了!!
作者: kid1943    时间: 2014-10-10 16:51
学习受教啊
作者: hollywood2014    时间: 2014-10-10 17:37
这个在多线程中访问共享资源的时候应该很有用的,这个模式我还在细细揣摩啊




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