Создание экземпляра в классе Java - PullRequest
3 голосов
/ 08 июня 2010

Посоветуйте, пожалуйста, разницу между двумя способами объявления конструктора Java

  public class A{

    private static A instance = new A();
    public static A getInstance() { return instance;
        }
    public static void main(String[] args) {
          A a= A.getInstance();
        }
 }

И

    public class B{
    public B(){};


     public static void main(String[] args) {
     B b= new B();
     }
}

Спасибо

Ответы [ 3 ]

11 голосов
/ 08 июня 2010
  • Класс A должен быть Singleton , где вы можете иметь только один экземпляр A. Вы можете получить этот единственный экземпляр, вызвав getInstance();

В программной инженерии шаблон синглтона является шаблоном проектирования, используемым для реализации математической концепции синглтона путем ограничения экземпляра класса одним объектом .Это полезно, когда ровно один объект необходим для координации действий в системе.

Есть несколько способов сделать это в зависимости от ваших требований:

public class A{
    private static A instance = new A();
    private A(){} // private constructor
    public static A getInstance() {return instance;}
}

или не создавать экземпляр до первого вызова

public class A{
    private static A instance = null;
    private A(){} // private constructor
    public static A getInstance() {
        if(instance == null){
           instance = new A(); // create the one instance.
        }
        return instance;
    }
}
  • Class B - это класс с конструктором без параметров.Вы можете создать столько экземпляров B, сколько захотите, позвонив new B();
5 голосов
/ 08 июня 2010

Похоже, что A является попыткой реализации шаблона singleton , но это не совсем правильно - у него должен быть собственный конструктор:

class A {
 private static final A INSTANCE = new A();
 private A() { }
 public static A getInstance() { return INSTANCE; }
}

Это гарантирует, что только один экземплярA всегда существует в вашем приложении - если любому другому объекту нужно использовать экземпляр A, чтобы сделать что-то, единственный способ получить его - это метод getInstance(), который все время возвращает один и тот же экземпляр.

С помощью B вы можете иметь столько экземпляров B, сколько необходимо / желательно, и любой другой объект может создать новый экземпляр B, если он выберет.

0 голосов
/ 08 июня 2010

В первом случае доступен только один экземпляр. Во втором случае можно иметь как можно больше. В первом случае вам нужно сделать конструктор приватным.

...