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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hamesksk 中级黑马   /  2015-3-14 23:19  /  649 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

突然想到一个问题,单例设计模式,为什么不这样设计呢?
class Single{
       final static Single p = new Single();
}

10 个回复

正序浏览
空洞的望着窗外 发表于 2015-3-15 00:42
class Single{//饿汉
private Single(){}
private static  final Sinagle s=new Single();
public static Single  getSingle ...

忘记了,昨晚几乎闭着眼打的,,很久以前的东西了,,,
回复 使用道具 举报
本帖最后由 空洞的望着窗外 于 2015-3-15 11:28 编辑

class Single{//饿汉
private Single(){}
private static  final Sinagle s=new Single();
public static Single  getSingle(){
return  s;
}

}

//懒汉

class Single{
private Single(){}
private static Single s=null;
public static synchronized  Single getSingle(){
if(s==null)
s=new Single();
return s;
}
}

点评

饿汉式的构造方法必须私有的吧,不然我想生成几个实例就能生成几个实例  发表于 2015-3-15 11:24
回复 使用道具 举报
每一个类都有一个默认的构造方法,final static Single p = new Single();  这行代码只是创建了一个 变量,  因为存在一个默认的构造方法,用Single s = new Single();仍然可以创建Single的实例。
回复 使用道具 举报
艺多不压身丶 发表于 2015-3-14 23:24
你说的是加上final吗?标准的饿汉单例是要加上final的。

原来如此,我学的单例都没加过final 。。。。以后朝标准看齐

点评

所以懒要付出终身的代价!!  发表于 2015-3-14 23:54
懒汉就不要加final了。要不然就终身为空了。  发表于 2015-3-14 23:35
回复 使用道具 举报
class Single
{
    private Single(){}      
    public static final Single p = new Single();
      
}
回复 使用道具 举报
你说的是加上final吗?标准的饿汉单例是要加上final的。
回复 使用道具 举报
class Single{
        final static Single p = new Single();
        private Single(){}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马