在学习策略模式时,给某方法传入参数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;
    }
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐