组合模式介绍

image-20240728160959115

这有点像螺丝 和螺母,通过⼀堆的链接组织出⼀棵结构树。而这种通过把相似对象 ( (也可以称作是方法)组合成⼀组可被调用的结构树对象的设计思路叫做组合模式。

这种设计⽅式可以让你的服务组节点进⾏⾃由组合对外提供服务,例如你有三个原⼦校验功能( A:身份 证 、 B:银⾏卡 、 C:⼿机号 )服务并对外提供调⽤使⽤。有些调⽤⽅需要使⽤AB组合,有些调⽤⽅需要 使⽤到CBA组合,还有⼀些可能只使⽤三者中的⼀个。那么这个时候你就可以使⽤组合模式进⾏构建服 务,对于不同类型的调⽤⽅配置不同的组织关系树,⽽这个树结构你可以配置到数据库中也可以不断的 通过图形界⾯来控制树结构。

所以不同的设计模式⽤在恰当好处的场景可以让代码逻辑⾮常清晰并易于扩展,同时也可以减少团队新 增⼈员对项⽬的学习成本

案例场景模拟

image-20240728161147179

以上是⼀个非常简化版的营销规则 决策树 ,根据 性别 、 年龄 来发放不同类型的优惠券,来刺激消费起 到精准用户户促活的目的

⽤⼀坨坨代码实现

这⾥我们举⼀个关于 ifelse 诞⽣的例⼦,介绍⼩姐姐与程序员 之间的 故事 导致的 事故 。

image-20240728161400497

⼯程结构

itstack-demo-design-8-01
!"" src
!"" main
!"" java
!"" org.itstack.demo.design
!"" EngineController.java

代码实现

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