请求一下,除了模板方法模式还有什么比较好的方式来固化执行步骤

2023-05-08 15:34:08 +08:00
 NoKey
比如,我们有一个执行过程,要求执行步骤是
step1
step2
step3
step4
用模板方法模式来做,比较直接,限定了
execute() {
step1();
step2();
step3();
step4();
}
这样,只需要开发人员继承模板方法类,自行实现各步骤,然后调用 execute 即可
那么,这样要求每个执行过程,都要继承一次这个模板方法类,如果过程类型较多,会产生大量的类
请教一下各位大佬,有没有更好的实现方法呢?
谢谢
813 次点击
所在节点    程序员
6 条回复
mk0114
2023-05-08 15:48:59 +08:00
把每个步骤分割成类呢,有一个 StepList ,需要执行什么步骤就生成并添加进去,然后按顺序执行。也就是用组合代替继承。
NoKey
2023-05-08 15:55:46 +08:00
@mk0114 这个方法不错。一些场景下可能有问题,比如,我们要把步骤一和步骤二进行交换,模板方法的优势就是,修改 execute 就好了,其他代码都不用动,list 装进去的方法,就需要全部改一轮。
mk0114
2023-05-08 17:15:27 +08:00
不用全部步骤都放到一个集合中,按照你的模板,可以分成 step1234 四个集合。当然我这是在 Unity 编辑器中添加组件很方便,如果你要是纯代码就不太直观了。改成 yml 等配置的形式可能更好吧。
yule111222
2023-05-08 17:26:39 +08:00
用高阶函数把函数作为返回值取代实例类,外部调用协调器从之前的获取实例类变成获取函数
leokun
2023-05-08 17:30:19 +08:00
不知道你这个是什么语言,如果是 js 的话可以用高阶函数来组合,自己实现 execute 和 createStep 两个函数
execute(
createStep((stateSetter)=>{
stateSetter(...)
}),
createStep((stateSetter)=>{
stateSetter(...)
}),
createStep((stateSetter)=>{
stateSetter(...)
})
)
createStep 可以返回函数,也可以只返回结构,这样就可以复用 step
yibo2018
2023-05-09 11:24:05 +08:00
责任链模式可以吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938295

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX