Skip to content

Commit

Permalink
Merge pull request #427 from marszhangzhixing/patch-10
Browse files Browse the repository at this point in the history
Update 2020-06-08-重学 Java 设计模式《实战组合模式》.md
  • Loading branch information
fuzhengwei authored May 31, 2024
2 parents b369109 + fc0980b commit ef36005
Showing 1 changed file with 6 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ lock: need

`小朋友才做选择题,成年人我都要`

头几年只要群里一问我该学哪个开发语言,哪个语言最好。群里肯定聊的特别火热,有人支持PHP、有人喊号Java、也有C++和C#。但这几年开始好像大家并不会真的`刀枪棍棒、斧钺钩叉`般讨论了,大多数时候都是开玩笑的闹一闹。于此同时在整体的互联网开发中很多时候是一些开发语言公用的,共同打造整体的生态圈。而大家选择的方式也是更偏向于不同领域下选择适合的架构,而不是一味地追求某个语言。这可以给很多初学编程的新人一些提议,不要刻意的觉得某个语言好,某个语言不好,只是在适合的场景下选择最需要的。而你要选择的那个语言可以参考招聘网站的需求量和薪资水平决定。
头几年只要群里一问我该学哪个开发语言,哪个语言最好。群里肯定聊的特别火热,有人支持PHP、有人喊号Java、也有C++和C#。但这几年开始好像大家并不会真的`刀枪棍棒、斧钺钩叉`般讨论了,大多数时候都是开玩笑的闹一闹。与此同时在整体的互联网开发中很多时候是一些开发语言公用的,共同打造整体的生态圈。而大家选择的方式也是更偏向于不同领域下选择适合的架构,而不是一味地追求某个语言。这可以给很多初学编程的新人一些提议,不要刻意的觉得某个语言好,某个语言不好,只是在适合的场景下选择最需要的。而你要选择的那个语言可以参考招聘网站的需求量和薪资水平决定。

`编程开发不是炫技`

Expand Down Expand Up @@ -60,7 +60,7 @@ lock: need

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

虽然一部分小伙伴可能并没有开发过营销场景,但你可能时时刻刻的被营销着。比如你去经常浏览男性喜欢的机械键盘、笔记本电脑、汽车装饰等等,那么久给你推荐此类的优惠券刺激你消费。那么如果你购物不多,或者钱不在自己手里。那么你是否打过车,有一段时间经常有小伙伴喊,为什么同样的距离他就10元,我就15元呢?其实这些都是被营销的案例,一般对于不常使用软件的小伙伴,经常会进行稍微大力度的促活,增加用户粘性。
虽然一部分小伙伴可能并没有开发过营销场景,但你可能时时刻刻的被营销着。比如你去经常浏览男性喜欢的机械键盘、笔记本电脑、汽车装饰等等,那么就给你推荐此类的优惠券刺激你消费。那么如果你购物不多,或者钱不在自己手里。那么你是否打过车,有一段时间经常有小伙伴喊,为什么同样的距离他就10元,我就15元呢?其实这些都是被营销的案例,一般对于不常使用软件的小伙伴,经常会进行稍微大力度的促活,增加用户粘性。

那么在这里我们就模拟一个类似的决策场景,体现出组合模式在其中起到的重要性。另外,组合模式不只是可以运用于规则决策树,还可以做服务包装将不同的接口进行组合配置,对外提供服务能力,减少开发成本。

Expand Down Expand Up @@ -415,7 +415,7 @@ public class TreeEngineHandle extends EngineBase {
}
```

- 这里对于决策引擎的实现就非常简单了,通过传递进来的必要信息决策树信息、决策物料值,来做具体的树形结构决策。
- 这里对于决策引擎的实现就非常简单了,通过传递进来的必要信息决策树信息、决策物料值,来做具体的树形结构决策。

### 3. 测试验证

Expand Down Expand Up @@ -540,7 +540,7 @@ public void init() {
![树形结构的组织关系](https://bugstack.cn/assets/images/2020/itstack-demo-design-8-04.png)

- **重要**,这一部分是组合模式非常重要的使用,在我们已经建造好的决策树关系下,可以创建出树的各个节点,以及对节点间使用链路进行串联。
- 及时后续你需要做任何业务的扩展都可以在里面添加相应的节点,并做动态化的配置。
- 即使后续你需要做任何业务的扩展都可以在里面添加相应的节点,并做动态化的配置。
- 关于这部分手动组合的方式可以提取到数据库中,那么也就可以扩展到图形界面的进行配置操作。

#### 3.2 编写测试类
Expand Down Expand Up @@ -574,11 +574,11 @@ public void test_tree() {
Process finished with exit code 0
```

- 从测试结果上看这与我们使用`ifelse`是一样的,但是目前这与的组合模式设计下,就非常方便后续的拓展和修改。
- 从测试结果上看这与我们使用`ifelse`是一样的,但是目前这一种组合模式设计下,就非常方便后续的拓展和修改。
- 整体的组织关系框架以及调用决策流程已经搭建完成,如果阅读到此没有完全理解,可以下载代码观察结构并运行调试。

## 七、总结

- 从以上的决策树场景来看,组合模式的主要解决的是一系列简单逻辑节点或者扩展的复杂逻辑节点在不同结构的组织下,对于外部的调用是仍然可以非常简单的。
- 从以上的决策树场景来看,组合模式主要解决的是一系列简单逻辑节点或者扩展的复杂逻辑节点在不同结构的组织下,对于外部的调用是仍然可以非常简单的。
- 这部分设计模式保证了开闭原则,无需更改模型结构你就可以提供新的逻辑节点的使用并配合组织出新的关系树。但如果是一些功能差异化非常大的接口进行包装就会变得比较困难,但也不是不能很好的处理,只不过需要做一些适配和特定化的开发。
- 很多时候因为你的极致追求和稍有倔强的工匠精神,即使在面对同样的业务需求,你能完成出最好的代码结构和最易于扩展的技术架构。`不要被远不能给你指导提升能力的影响到放弃自己的追求!`

0 comments on commit ef36005

Please sign in to comment.