2010-06-08 3 views
3

Пожалуйста, сообщите мне разницу между двумя способами декларирования Java конструкторуСоздание экземпляра в классе 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(); 
    } 
} 

Благодарности

+0

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

+0

Это домашнее задание? –

ответ

11
  • Класс 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; 
    } 
} 
  • Класс B является класс с конструктором без параметров. Вы можете создать стольких B экземпляров, как вы хотите, вызвав new B();
+0

Спасибо, это термин, который я ищу. – aladine

5

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

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

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

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

+0

Спасибо. это очень четкий ответ – aladine

0

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

Смежные вопросы