• 请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX  ›  程序员

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

  •  
  •   NoKey · May 8, 2023 · 2161 views
  •   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
    mk0114
    mk0114
    May 8, 2023
    1
    把每个步骤分割成类呢,有一个 StepList ,需要执行什么步骤就生成并添加进去,然后按顺序执行。也就是用组合代替继承。
    NoKey
    NoKey
    OP
    May 8, 2023
    2
    @mk0114 这个方法不错。一些场景下可能有问题,比如,我们要把步骤一和步骤二进行交换,模板方法的优势就是,修改 execute 就好了,其他代码都不用动,list 装进去的方法,就需要全部改一轮。
    mk0114
    mk0114
    May 8, 2023
    3
    不用全部步骤都放到一个集合中,按照你的模板,可以分成 step1234 四个集合。当然我这是在 Unity 编辑器中添加组件很方便,如果你要是纯代码就不太直观了。改成 yml 等配置的形式可能更好吧。
    yule111222
    yule111222
    May 8, 2023
    4
    用高阶函数把函数作为返回值取代实例类,外部调用协调器从之前的获取实例类变成获取函数
    leokun
    leokun
    May 8, 2023
    5
    不知道你这个是什么语言,如果是 js 的话可以用高阶函数来组合,自己实现 execute 和 createStep 两个函数
    execute(
    createStep((stateSetter)=>{
    stateSetter(...)
    }),
    createStep((stateSetter)=>{
    stateSetter(...)
    }),
    createStep((stateSetter)=>{
    stateSetter(...)
    })
    )
    createStep 可以返回函数,也可以只返回结构,这样就可以复用 step
    yibo2018
    yibo2018
    May 9, 2023
    6
    责任链模式可以吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4345 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:10 · PVG 16:10 · LAX 00:10 · JFK 03:10
    ♥ Do have faith in what you're doing.