2013-12-02 5 views
0

Я видел в прошлом месяце реализацию шаблона Null Object как то, что казалось полем Singleton для типа. Однако я не могу вспомнить этот подход. Я работаю над шаблонами и осознаю, что они не соответствуют действительности.Null Object Pattern - public static final

С моей точки зрения, я думаю, что это будет следующим, но могу ли я получить обзор?

public final class SearchCriteriaAnomalyFilter { 

    public static final SearchCriteriaAnomalyFilter NULL_INSTANCE; 

    private final T2AnomalyStatus status; 
    private final T2AnomalyType type; 
    private final boolean limitMaxOneAnomaly; 

    public SearchCriteriaAnomalyFilter(T2AnomalyStatus status, T2AnomalyType type, 
              boolean limitMaxOneAnomaly){ 
     this.status = status; 
     this.type = type; 
     this.limitMaxOneAnomaly = Boolean.valueOf(limitMaxOneAnomaly); 
    } 

    private SearchCriteriaAnomalyFilter(){} 

    public static SearchCriteriaAnomalyFilter instanceOfNullObject(){ 
     if (NULL_INSTANCE == null) { 
     NULL_INSTANCE = new SearchCriteriaAnomalyFilter(); 
     } 
     return NULL_INSTANCE; 
    } 

    ... 
} 
+0

Как насчет первого конструктора? Не нужно ? –

+0

Мне кажется, что я могу статически инициализировать его 'instanceOf' или создав экземпляр, который может быть мне смешал два понятия, т.е. неизменяемость и нулевой объект. – Crowie

+2

Задать вопрос здесь http://codereview.stackexchange.com/ – aalku

ответ

1
public static final SearchCriteriaAnomalyFilter NULL_INSTANCE = new SearchCriteriaAnomalyFilter(); 
public static SearchCriteriaAnomalyFilter instanceOfNullObject(){ 
    return NULL_INSTANCE; 
} 

Остальная часть кода казалось прекрасным.

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

+0

Имеет смысл ура. Несколько красных линий в моей среде IDE настаивали на том, что мои окончательные поля будут инициализированы. Пока я не знаю значения по умолчанию, поэтому я установил их как «null» и false по мере необходимости. Ироническое и потенциальное снижение правдоподобия. Я лучше исследовал некоторые дефолты. – Crowie

+2

Добро пожаловать. Лучше спросить хороший вопрос, а затем реализовать плохое решение. ;) – TwoThe

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