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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘落 中级黑马   /  2013-9-19 23:28  /  1572 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 飘落 于 2013-9-20 12:25 编辑
  1. class Singleton
  2. {
  3.             private static Singleton s=new Singleton();
  4.             private Singleton(){}
  5.             public static Singleton getInstance()
  6.             {
  7.                          return s;
  8.             }
  9. }
复制代码
单例模式通常被写成上面那个样子,为什么不写成下面这个样子?
  1. class Singleton
  2. {
  3.             static final Singleton s=new Singleton();
  4.             private Singleton(){}
  5. }
复制代码
这段代码既能达到单例的要求,代码量又少。


评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2 很给力!

查看全部评分

5 个回复

倒序浏览
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
达人就是将复杂的代码简练化
回复 使用道具 举报
本帖最后由 第一印象 于 2013-9-20 08:30 编辑

你这么写是可以的,不过要加public哦:
  1. class Singleton
  2. {
  3.             public static final Singleton s=new Singleton();
  4.             private Singleton(){}
  5. }
复制代码
这样写就类似于枚举类型了,并且该枚举只有一个值,是完全没有问题的,因为枚举也是实现单例的一种手段,但是如果我想在将对象提供给调用者之前做一些判断和限制,这个就没办法完成了,只能用下面的方式:
  1.     class Singleton
  2.     {
  3.                 private static Singleton s=new Singleton();
  4.                 private Singleton(){}
  5.                 public static Singleton getInstance()
  6.                 {
  7.                              //逻辑代码块
  8.                              return s;
  9.                 }
  10.     }
复制代码
回复 使用道具 举报 1 0
如大神 第一印象  所说,确实是少了个public。试验完全可行
  1. class HeiMa
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Singleton ss= Singleton.s;
  6.                 System.out.println(ss.i);
  7.         }

  8. }

  9. class Singleton
  10. {
  11.         public int i =20 ;
  12.         public static final Singleton s= new Singleton();
  13.         private Singleton(){}
  14. }
复制代码
运行结果:
  1. D:\workspace\day04>javac HeiMa.java

  2. D:\workspace\day04>java HeiMa
  3. 20

  4. D:\workspace\day04>
复制代码
回复 使用道具 举报
这样也可以实现单列的功能!不过我个人不建议不这么做.
1,首先这不符合java的标准编码规范,就像一个javaBean一样,不会将属性值设成公共的,而是设成private又向外提供public方法去访问,这种设计模式安全性很高,因为外界只有通过方法间接访问权限.
2,再次是通过向外提供public方法才能访问方式还可在方法内部添加安全检测代码,使得程序运行起来就很安全.
比如:
  1. public static Singleton newInstance(){
  2.    if(singleton==null)//确认对象是否为空
  3.        singleton=new Singleton();
  4.    return singleton;
  5. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马