用Java

时间:2015-05-12 18:44:58

标签: java design-patterns singleton

我希望你们能帮我解决这个项目中的以下问题。我是java的初学者,所以对此有任何帮助表示感谢:

这意味着什么?

   private static Singleton singleton = new Singleton

我们是否正在创建一个类型为class的变量。我见过很多地方这种做法。你能告诉我为什么我们用类名创建变量/对象吗?

这个" Singleton单身"这是一个变量声明或对象声明。

2)Singleton tmp = Singleton.getInstance()

有人能帮助我们在这做什么吗?我们创造了另一个对象" tmp"对?右边的陈述是做什么的?

public class Singleton {

   private static Singleton singleton = new Singleton();

   /* A private Constructor prevents any other 
    * class from instantiating.
    */
   private Singleton() {}

   /* Static 'instance' method */
   public static Singleton getInstance() {
      return singleton;
   }

   /* Other methods protected by singleton-ness */
   protected static void demoMethod() {
      System.out.println("demoMethod for singleton"); 
   }
}

文件:SingletonDemo.java

public class SingletonDemo {
  public static void main(String[] args) {
     Singleton tmp = Singleton.getInstance( );
  tmp.demoMethod( );
}

4 个答案:

答案 0 :(得分:3)

第一个问题是什么意思:

private static Singleton singleton = new Singleton();

这同样可以写成:

private static Singleton myVariable = new Singleton();

当你看到Class class时,它是一个变量声明。第一个单词是变量的类型,第二个单词是变量的名称。类型(或类名)由编写类的人定义。变量名由您自己决定。将变量名称的全部小写名称全部用于。

关于第二个问题,你问一下

Singleton tmp = Singleton.getInstance();

这里我们有一个名为 tmp 的变量 Singleton ,它被初始化为函数调用的结果。函数调用是Singleton.getInstance()。这是一个static方法,这意味着您不需要该类的实例来调用它。它只返回对象,以便您可以访问它。

请注意,在第一种情况下,它使用private初始化new Singleton()变量。使用new会导致创建对象。在第二种情况下,没有对象创建。它要求Singleton类给它一些已经创建的东西。

答案 1 :(得分:1)

变量名称只是一个名称。它没有要求任何东西。请阅读this documentation.惯例是以驼峰式,小写的第一个字母。但它可以是任何东西。它在功能方面没有区别,无论它是否与类名或其他名称相同。

private static Singleton singleton = new Singleton();

没有区别
private static Singleton Singleton = new Singleton(); // Bad style
private static Singleton s = new Singleton();
private static Singleton xyz = new Singleton();

所有功能都相同。

答案 2 :(得分:0)

 Singleton tmp = Singleton.getInstance()

它不是另一个对象。这是getInstance()的另一个参考。这是单身设计

<强>的Singleton  在VM的运行时间内为类维护单个或相同的对象。 refer here

答案 3 :(得分:0)

对于变量vs对象问题,对象本质上是内存中某个有意义值的集合,其中包括方法和字段列表等。每个'live'对象都有一个指向它的引用变量(告诉你它在内存中的位置),它是一个变量,其类型=对象的类。在您的代码中,变量'singleton'指向由构造函数方法new Singleton()创建的'Singleton'类的对象,方法getInstance()返回该Singleton对象的内存中的位置,所以你可以把它放在一个新的变量中。 tmp就是这种情况的一个例子,它是另一个保存对同一个Singleton对象的引用的变量。