Какой шаблон я бы предпочел? - PullRequest
5 голосов
/ 10 ноября 2011

В нашем проекте нам нужно сохранить некоторый объект (например, User), а также класс User должен иметь флаг проверки (методы, такие как setOutdated и isOutdated)

Время от времени наш объект User может бытьnull, но флаг проверки должен быть доступен в этом случае.Можно извлечь эти методы из класса User, но это поле и методы должны быть внутри этого класса из-за семантики.

Я нашел несколько статей о шаблоне Null Object (например, this ), и я хочу знать - возможно ли создать нулевой объект (как шаблон), который может хранить несколько состояний, таких как нулевое устаревшее, нулевое не устаревшее, не нулевое устаревшее и не нулевое не устаревшее.

PS:Если в моем классе введено поле «Устаревшее», будет очень сложно очистить объект, вместо того, чтобы установить его в нуль

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

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

Я предлагаю вам либо использовать предоставленное решение @Kent, либо сделать пользовательский объект чем-то похожим на объекты «PresentUser» и «FormerUser». Последнее технически является тем же решением, которое вы предлагаете сами, но это не шаблон пустых объектов.

2 голосов
/ 10 ноября 2011

Моя первая идея - добавить класс UserUtil (имя может быть другим).

и метод, подобный

public static boolean isUserOutdated(User u){
return (u==null)? true :u.isOutdated();

}

 or return (u==null)? false :u.isOutdated(); depends on your businesslogic

это работает в вашей ситуации?

...