简体   繁体   中英

Null Object Pattern - public static final

I saw sometime in the last month an implementation of Null Object pattern as what seemed like a Singleton field on a type. I can't really remember the approach though. I'm working on patterns and conscious of implementing them out of place.

From my mind I think it would be as follows but can I get a review on that?

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;
   }

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

The rest of your code seemed fine.

The reason to use the above construct is that there is no need for a lazy initialization: the null-object won't change, nor does it need any special construction (as you properly implemented with the private constructor).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM