Какой тип шаблона реализует этот статический класс? - PullRequest
0 голосов
/ 07 июня 2011
package com.mycontainer;

public class MyContainer {
    private static ContainerConfig cConfig;

    private MyContainer() {

    }

    public static ContainerConfig getConfiguration() {      
        if (cConfig == null)            
            cConfig = new ContainerConfig();        
        return cConfig;
    }

}

Ответы [ 4 ]

6 голосов
/ 07 июня 2011

Это, вероятно, паттерн Синглтон: http://en.wikipedia.org/wiki/Singleton_pattern#Implementation

3 голосов
/ 07 июня 2011

Я бы сказал, что это плохая реализация отложенной инициализации и шаблона Singleton.Нет синхронизации и, следовательно, нет безопасности потоков.Под несколькими потоками, обращающимися к этому коду, вы можете получить более одного экземпляра.

Обновление: лучше, чтобы ваш код был таким:

package com.mycontainer;

public class MyContainer {
   // static final singleton object to rely on class loader to create it for you
   // in a thread safe way
   private static final ContainerConfig cConfig = new ContainerConfig();

   // private constructor to prevent instantiation
   private MyContainer() {}

   // getter method for your singleton object
   public static ContainerConfig getContainerConfig() {
      return cConfig;
   }
}
0 голосов
/ 07 июня 2011

Ленивая инициализация. Вы откладываете инициализацию, пока она не понадобится.

См. http://www.javapractices.com/topic/TopicAction.do?Id=34.

0 голосов
/ 07 июня 2011

Это определенно шаблон Singleton.

  • contructor является закрытым, что означает, что только этот класс может создавать себя.
  • метод getConfiguration () является статическим и создает экземпляр частного статического экземпляра.который возвращается по запросу, что гарантирует, что во время выполнения существует только один объект этого класса.

Редактировать: это может быть Singleton-FAIL, но он происходит от Singleton.;]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...