黑马程序员技术交流社区

标题: 回忆中写下单例设计模式,请大家帮忙纠正错误!谢谢! [打印本页]

作者: 黑马-郑玉元    时间: 2013-3-28 21:08
标题: 回忆中写下单例设计模式,请大家帮忙纠正错误!谢谢!
本帖最后由 黑马-郑玉元 于 2013-3-28 22:08 编辑
  1. public class SingleDemo {
  2.         private static final SingleDemo s = new SingleDemo();
  3.         private SingleDemo(){                         //构造方法私有化
  4.         }
  5.         public static SingleDemo getInstance(){
  6.                 return s;
  7.         }
  8. }
  9. //懒汉式
  10. class SingleDemo02 {
  11.         private static SingleDemo02 s;
  12.         private SingleDemo02(){               //构造方法私有化
  13.         }
  14.         public static SingleDemo02 getInstance(){
  15.                 if(s==null)
  16.                         synchronized (s){
  17.                                 if(s==null)
  18.                                         s = new SingleDemo02();
  19.                         }
  20.                 return s;
  21.         }
  22.         
  23. }
复制代码

作者: 刘胜寒    时间: 2013-3-28 21:20
好像没错啊!!都中级黑马!还能有错,岂不是丢了黑马的人??
作者: lucy198921    时间: 2013-3-28 21:28
(1)饿汉式 开发用这种方式。
        class Student
        {
                private Student(){}

                private static Student s = new Student();

                public static Student getInstance()
                {
                        return s;
                }
        }
        (2)懒汉式 面试写这种方式。
        class Teacher
        {
                private Teacher(){}

                private static Teacher t;

                public static Teacher getInstance()
                {
                        if(t==null)
                        {
                                t = new Teacher();
                        }
                        return t;
                }
        }
作者: 张昶    时间: 2013-3-28 21:30
饿汉式:
class Single{
        private static final Single s = new Single();
        private Single(){}
        public static Single getInstance(){
                return s;
        }
}



懒汉式(延迟加载的单例设计模式):
class Single{
        private static Single s = null;
        private Single(){}
        public static Single getInstance(){
                if(s==null){
                        synchronized(Single.class){
                                if(s==null){
                                        s = new Single();
                                }
                        }
                }
                return s;
        }
}
作者: 被遗弃者    时间: 2013-3-28 21:31
都是这么强悍呀
作者: 董霁辉    时间: 2013-3-28 21:35
private static final SingleDemo s = new SingleDemo();

问题好像出在这句话,不知道是不是和你加了final 有关系,不记得毕老师加过final。
俺是初学者,要是说错了,请指出,共同学习。哈~
作者: 黑马-郑玉元    时间: 2013-3-28 21:54
董霁辉 发表于 2013-3-28 21:35
问题好像出在这句话,不知道是不是和你加了final 有关系,不记得毕老师加过final。
俺是初学者,要是说错 ...

这个是可加可不加的!
作者: 黑马-郑玉元    时间: 2013-3-28 21:55
张昶 发表于 2013-3-28 21:30
饿汉式:
class Single{
        private static final Single s = new Single();

这个是我想要的!
作者: 黑马-郑玉元    时间: 2013-3-28 21:56
lucy198921 发表于 2013-3-28 21:28
(1)饿汉式 开发用这种方式。
        class Student
        {

你的这个只能得80分!
作者: 黑马-郑玉元    时间: 2013-3-28 21:58
似水像火 发表于 2013-3-28 21:20
好像没错啊!!都中级黑马!还能有错,岂不是丢了黑马的人??

就是加了同步不太确定!其他的都还好!同步代码不好搞!
作者: 黑马-郑玉元    时间: 2013-3-28 21:58
似水像火 发表于 2013-3-28 21:20
好像没错啊!!都中级黑马!还能有错,岂不是丢了黑马的人??

就是加了同步不太确定!其他的都还好!同步代码不好搞!
作者: 赵喜平    时间: 2013-3-28 22:05
懒汉式
class Single{
        private static Single s = null;
        private Single(){}
        public static Single getInstance(){
                if(s==null){
                        synchronized(Single.class){   //此处加锁减少锁的判断次数,代码得到优化
                                if(s==null){
                                        s = new Single();
                                }
                        }
                }
                return s;
        }
}
作者: 黑马-郑玉元    时间: 2013-3-28 22:09
我想说我那样加锁可不可以!




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