黑马程序员技术交流社区

标题: 饿汉式 懒汉式 有点不明白 求高手讲解 [打印本页]

作者: 李勇    时间: 2012-6-1 11:14
标题: 饿汉式 懒汉式 有点不明白 求高手讲解
饿汉式 懒汉式 有点不明白  求高手讲解
两者特点是什么
区分是什么
作用如何

作者: 田建    时间: 2012-6-1 11:34
懒汉式和饿汉式都是讲单例设计模式的时候涉及的内容:
饿汉式是先初始化对象,饿汉式类一进内存,就创建对象,设计一般建议饿汉式;而懒汉式,延迟加载,调用相应方法时,才建立对象,下面举个例子说明:
Eg: class SimpleDemo//单例设计模式
{
        public static void main(String[] args)
        {
                Student s1=Student.getInstance();
                Student s2=Student.getInstance();
                s1.setAge(20);
                s1.setName("HuangQin");
                System.out.println(s2.getAge()+";"+s2.getName());
        }
}
class Student
{
        private String name;
        private int age;
        public void setAge(int age)
        {
                this.age=age;
        }
        public int getAge()
        {
                return age;
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        private Student(){}
        public static Student s=new Student();//先初始化对象,称为:饿汉式----类一进内存,就创建对象
        public static Student getInstance()
        {
                return s;
        }
}
/* class Student
{
        private static Student s=null;//懒汉式,延迟加载,调用getInstance方法时,才建立对象
        private Student(){}
        public static Student getInstance()
        {
                if(s==null)
                        s=new Studente();
                        return s;
        }
       
}
*/
作者: 黑马11期李项京    时间: 2012-6-1 12:11
class  Single
{
        private int num;
        public void setNum(int num)
        {
        this.num=num;
        }
        public int getNum()
        {
        return num;
        }
       
        //单例设计模式方法的两种方式,一般用饿汉式

        /*这个先初始化对象
        称为:饿汉式

        Single类一进内存,就已经创建好了对象。*/
         private Single(){}//1         

        private static Single s=new Single();//2

        public static Single getInstance()
        {
        return s;
        }//3


        /*对象是方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式。
        Single类进内存,对象还没有存在,只有被调用了getInstance方法时,才建立对象。
        */
        private Sinle(){}
        private static Single s=null;
        public static Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)//面试用
                        {
                                if(s==null)
                                        s=new Single();
                        }
                }
        return s;
        }


       
}
作者: 林豪    时间: 2012-6-1 12:21
不用上代码了,上了更难记
你记住 饿汉式就像饿汉饥不择食,一加载就创建对象,
懒汉式 就像懒汉不紧不慢,等需要了在创建对象
因为早晚都要创建,所以就用饿汉式,记住饿汉式就行了
懒汉式可能造成安全的隐患,可能多线程同时生成多个对象
作者: 李勇    时间: 2012-6-1 12:33
谢谢各位
作者: 于清云    时间: 2012-6-1 13:28
public class Person
{
        private String name;
        public void setName(String name)
        {
                this.name = name;
        }
        public String getName()
        {
                return name;
        }
/*
以下属于懒汉式。
       
        private Person(){}//私有的默认构造函数,保证外界无法直接实例化。
        public static Person p = null;
       
        synchronized public static Person getInstance()//静态工厂方法,返回此类的唯一实例。
        {
                if (p == null)
                {
                        p = new Person();
                }
                return p;
        }
*/
/*
以下属于恶汉式。
*/
        private Person(){}
        public static Person p = new Person();
        public static Person getInstance()
        {
                return p;
        }

        public static void main(String [] args)
        {
                Person p = Person.getInstance();
                p.setName("lisi");
                System.out.println(p.getName());
        }
}
作者: 闾丘日月    时间: 2012-6-1 13:58
十分怀疑楼主是真的不懂还是装的。我觉得不管是老毕还是张孝祥都已经讲的很清楚明白了,lz又来这么一个泛泛而问,哎。




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