黑马程序员技术交流社区

标题: 单例模式 [打印本页]

作者: 飘落    时间: 2013-9-19 23:28
标题: 单例模式
本帖最后由 飘落 于 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. }
复制代码
这段代码既能达到单例的要求,代码量又少。



作者: 黄文伯    时间: 2013-9-20 00:55
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
作者: 潘才新    时间: 2013-9-20 02:19
达人就是将复杂的代码简练化
作者: 第一印象    时间: 2013-9-20 08:28
本帖最后由 第一印象 于 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.     }
复制代码

作者: 王清华0    时间: 2013-9-20 10:07
如大神 第一印象  所说,确实是少了个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>
复制代码

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





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