在学习策略模式时,给某方法传入参数key,返回对应的策略。此时存在key没有对应的策略,即该方法的返回值未空(null),对这种情况有不同的处理方式。
1、直接返回null
这种方式是最差劲的一种。
由于返回值定义为StrategyInterface类型,后续可能有其他操作,直接返回null会造成空指针异常。
public static StrategyInterface getStrategy(String promotionKey){
StrategyInterface si = PROMOTION_MAP.get(promotionKey);
//若查询为null,直接返回null
return si == null ? null: si;
}
2、返回空对象
根据业务特点,放null的结果封装到一个空对象(该对象属于返回值类型)中,返回该空对象。
但由于该方法中可能会被频繁调用,会触发多次创建空对象的操作,而空对象不做任何事情,浪费了堆空间。
public static StrategyInterface getStrategy(String promotionKey){
StrategyInterface si = PROMOTION_MAP.get(promotionKey);
//把null封装到EmptyPromotionStrategy中,
//且EmptyPromotionStrategy是StrategyInterface 的实现类
return si == null ? new EmptyPromotionStrategy() : si;
}
3、返回空对象常量
同样根据业务特点,将null的结果封装到一个空对象(该对象属于返回值类型)中。
既然空对象不做任何事情,可以将其置为对象常量,在任何一次调用中都返回该对象向量,不会影响业务逻辑。以下是部分代码
//在类空间定义一个封装了空的对象常量
private static final StrategyInterface EMPTY_STRATEGY = new EmptyPromotionStrategy();
public static StrategyInterface getStrategy(String promotionKey){
StrategyInterface si = PROMOTION_MAP.get(promotionKey);
//返回空常量
return si == null ? EMPTY_STRATEGY : si;
}