应用场景:某天接到了一个需求,品牌给了一个第三方接口,例如:www.baidu.com,我们通过调用这个第三接口,会返回4种状态,ex:
String pageStatus = "pdpAdvertisePage"; 代表我们经过一堆处理后要返回的是pdp广告页面
String pageStatus = "plpAdvertisePage"; 代表我们经过一堆业务处理后要返回的是plp广告页面
String pageStatus = "shoppingCartAdvertisePage"; 代表我们经过一堆业务处理后要返回的是购物车广告页面
String pageStatus = "checkoutAdvertisePage"; 代表我们经过一堆业务处理后要返回的是购物车广告页面
期间的解决方案一:做了好多的判断 if elseif elseif 写到后面我都不知道里面的判断逻辑是啥,太复杂了,果断放弃了
期间的解决方案二:利用了策略模式+简单工厂模式,总算把那些个if else给去掉了,逻辑算是比较清晰了
期间的解决方案三:利用策略模式+反射工厂,很完美的解决了简单工厂模式所带来的弊端 -- 实现了所谓的开闭原则
代码目录结构:
公共的接口: GetPointAdvertisePageStrategey.java
import org.springframework.ui.Model;
/**
* @author : David.liu
* @description : 得到指定广告页面
* @creat :2019-05-26-22:02
*/
public interface GetPointAdvertisePageStrategey {
/**
* 得到指定的页面
* @param itemRecommendParam
* @param model
* @return
*/
String getAdvertisePage(Model model);
}
Ppd实现接口代码:PdpAdvertisePageStrategey.java
import org.springframework.stereotype.Component;
import org.springframework.ui.Model;
/**
* @author : David.liu
* @description : 得到pdp广告页面
* @creat :2019-05-26-22:05
*/
@Component
public class PdpAdvertisePageStrategey implements GetPointAdvertisePageStrategey{
/**
* 得到指定的页面
*
* @param itemRecommendParam
* @param model
* @return
*/
@Override
public String getAdvertisePage() {
return "pdp-advertise.jsp";
}
}
Plp实现接口代码:PlpAdvertisePageStrategey.java