黑马程序员技术交流社区

标题: 单利设计模式的问题 [打印本页]

作者: 李东梁    时间: 2014-3-24 19:21
标题: 单利设计模式的问题
本帖最后由 李东梁 于 2014-3-25 10:49 编辑
  1. class Single
  2. {

  3.         //2,自定义一个本类对象。
  4.         private static Single s = new Single();
  5.         //1,私有化构造函数。
  6.         private Single(){}

  7.         //3,定义一个方法返回该对象。让其他程序通过这个方法就可以获取该对象。
  8.         public static Single getInstance()
  9.         {
  10.                 System.out.println("s="+s);
  11.                 return s;
  12.         }
  13. }
  14. class SingleDemo
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 Single s1 = Single.getInstance();
  19.                 System.out.println("s1="+s1);
  20.                
  21.         }
  22. }
复制代码

老毕讲的单例设计步骤:
1,不让其他程序创建该类对象。
2,在本类中自己创建一个本类对象。
3,对外还提供一个获取该对象的方法。

为什么成员被设置成静态的了?


作者: 赵彦丰    时间: 2014-3-24 19:47
方法被访问只有两种方式,对象调用和类名调用,单例中没有对象了,只有类名调用,所以只能方法必须静态。
静态方法访问的也必须是静态成员。
作者: 透过生活    时间: 2014-3-24 20:26
既然私有化构造函数,不能创建对象。所以用静态就能通过类名调用。
作者: 追逐    时间: 2014-3-24 20:50
因为单例设计模式是无法new 对象的。所以对外提供的调用本类对象的方法必须用类名去调用。而可用被类名直接调用的只有静态方法或者静态函数。给成员变量加静态,是因为静态方法中只能调用静态函数。如果private static Single s = new Single(); 不被静态的话。在单例中的静态函数中是无法调用它的。所以。自己建立本类对象。必须要加静态。如果不加静态的话。就无法在对象被本类私有化后往外提供使用本类对象的方法。那么你设计的单例中的所有对象都无法被外部访问。你的程序也就没有任何意义了
作者: Teale    时间: 2014-3-24 21:00
你看哦。。。这个方法调用时没有传入任何参数。。 那你获得它的时候,那个对象从哪里来呢? 所以说里面肯定有个成员变量,返回的是成员变量。 那如果不定义成static 静态的, 每一次调用这个方法时,会创建新的成员变量给调用的那个对象,这样就不是单例模式了。。。 static 的作用就是这个成员变量一创建就是唯一的,不管多少个对象调用它,都是返回的这个成员变量(内存中的地址都是一样的)
作者: 橸瑩膤漃寞林    时间: 2014-3-24 21:19
public static Single getInstance()这句话怎么访问?方法被调用只有两种方式,1、要么对象2、要么类名,现在没有对象,就用类名调用,能用类名调用,这方法必须是静态,静态方法访问静态成员,private static Single s = new Single();所以成员变量要是静态的。




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