案例场景
以上是一个非常简化版的营销规则决策树,根据性别、年龄来发放不同类型的优惠卷,依达到刺激精准用户消费的目的。
if-else
对于上面简单的需求,可以一把梭哈:没有 if-else 干不了的事。
public class EngineController {
private Logger logger = LoggerFactory.getLogger(EngineController.class);
public String process(final String userId, final String userSex, final int userAge) {
logger.info("ifelse实现方式判断用户结果。userId:{} userSex:{} userAge:{}", userId, userSex, userAge);
if ("man".equals(userSex)) {
if (userAge < 25) {
return "果实A";
}
if (userAge >= 25) {
return "果实B";
}
}
if ("woman".equals(userSex)) {
if (userAge < 25) {
return "果实C";
}
if (userAge >= 25) {
return "果实D";
}
}
return null;
}
}
基于目前来讲:开发快、完成快、甚至还比较可读。
但是,如果更加细分,年轻/中年/成年,并且是否结婚,是否有娃,这个时候,你再直接写个 if-else 试试。手给你打断。
组合模式
具体代码如下:
主要代码关系图
代码结构图:
树结构执行引擎:真正使用的实现类继承一个抽象类,抽象类继承一个配置类(返回对象,类似工厂对象),并实现接口(主要流程的实现)。
很多都是这种实现方式:在抽奖系统中也有类似的实现:模板方法。
树结构原子模块组织关系:子类实现往后推(工厂模式)。
总结
目前学下来的感觉就是半知半会,能找着做下来,稍微理解了一点点。但是自己实现或者讲述就很难。学到现在感觉很多模式里面的东西都是交叉的,总感觉模式之间有很多共同的东西。得继续学习后面的模式,并且不断理解前面学习过的模式。
参考:bugstack.cn/