You need to sign in to view this topic
This topic created in 1283 days ago, the information mentioned may be changed or developed.
比如,我们有一个执行过程,要求执行步骤是
step1
step2
step3
step4
用模板方法模式来做,比较直接,限定了
execute() {
step1();
step2();
step3();
step4();
}
这样,只需要开发人员继承模板方法类,自行实现各步骤,然后调用 execute 即可
那么,这样要求每个执行过程,都要继承一次这个模板方法类,如果过程类型较多,会产生大量的类
请教一下各位大佬,有没有更好的实现方法呢?
谢谢
Supplement 1 · May 8, 2023
抱歉,忘了说了,我是用 java 语言的,其他语言大家也可以探讨一下,相互学习啊~😁
6 replies • 2023-05-09 11:24:05 +08:00
 |
|
把每个步骤分割成类呢,有一个 StepList ,需要执行什么步骤就生成并添加进去,然后按顺序执行。也就是用组合代替继承。
|
 |
|
@ mk0114 这个方法不错。一些场景下可能有问题,比如,我们要把步骤一和步骤二进行交换,模板方法的优势就是,修改 execute 就好了,其他代码都不用动,list 装进去的方法,就需要全部改一轮。
|
 |
|
不用全部步骤都放到一个集合中,按照你的模板,可以分成 step1234 四个集合。当然我这是在 Unity 编辑器中添加组件很方便,如果你要是纯代码就不太直观了。改成 yml 等配置的形式可能更好吧。
|
 |
|
用高阶函数把函数作为返回值取代实例类,外部调用协调器从之前的获取实例类变成获取函数
|
 |
|
不知道你这个是什么语言,如果是 js 的话可以用高阶函数来组合,自己实现 execute 和 createStep 两个函数 execute( createStep((stateSetter)=>{ stateSetter(...) }), createStep((stateSetter)=>{ stateSetter(...) }), createStep((stateSetter)=>{ stateSetter(...) }) ) createStep 可以返回函数,也可以只返回结构,这样就可以复用 step
|
 |
|
责任链模式可以吗
|