请教一下,这种情况用哪个设计模式比较好呢

181 天前
NoKey  NoKey
有个操作过程,需要执行 4 个步骤
step1()
step2()
step3()
step4()
要按照顺序执行
其中,step2 ,step4 要根据不同的场景进行单独开发
step1 和 step3 是公共化步骤,大家都一样
请问一下,哪种设计模式比较适合这个情况呢,我想着用工厂模式,但是感觉又有点不对
工厂模式不会限制执行步骤。
请教一下各位大佬,谢谢
2076 次点击
所在节点   程序员  程序员
22 条回复
Nosub
Nosub
181 天前
模板方法。
root71370
root71370
181 天前
责任链
wjx0912
wjx0912
181 天前
装饰器模式?
ovtfkw
ovtfkw
181 天前
流水账模式
31415926535x
31415926535x
181 天前
1 、step2,4 短期内如果不会膨胀很多不同的逻辑,就直接一串写下去,
2 、如果现阶段已经较多,抽象类中控制主流程,变化的内容交给子类实现,工厂+模板
3 、如果一定后续会增多,责任链或者流程引擎编排下子任务

( step1, 4 是什么内容呢,我猜是数据加载和收尾发消息等等操作,如果是的话,可以搞个 init, process, after 的模板,process 走工厂
1008610001
1008610001
181 天前
模板,或者你把 2 和 4 抽一个接口,由调用方传进来实现调用也可以
sagaxu
sagaxu
181 天前
最简单的方式,不用什么模式

class Base {
func step1()
func step2()
func step3()
func step4()

func process() {
step1()
step2()
step3()
step4()
}
}

class Foo {
override func step1()
override func step4()
}

class Bar {
override func step1()
override func step4()
}

func create(...): Base {
//根据场景实例化相应的子类
}
zgl263885
zgl263885
181 天前
命令模式?把每个步骤封装成一个个的命令,让后组合一个命令数组,由执行器去控制步骤的逐步执行以及暂停恢复等过程。另外可能会需要状态机模式来实现步骤执行的状态切换管理。
ixixi
ixixi
181 天前
按我的理解是 rxjs
mitoop
mitoop
181 天前
初步来看,模板模式 加 策略模式 ,模板实现不同场景,策略决定使用哪个场景。
z1829909
z1829909
181 天前
我觉得不用模式, 先做到代码复用, 等这些步骤多到维护很麻烦再设计怎么抽象.
设计模式本身就会增加理解成本. 当维护成本 >> 理解成本的时候才是划算的.
RainCats
RainCats
180 天前
我可能是用责任链串起来,然后 2 和 4 用策略模式+函数式
dododada
180 天前
说来惭愧,从来没有认真的研究过设计模式
yule111222
180 天前
不需要任何设计模式
laminux29
180 天前
如果业务复杂,建议用基于数据库的流程引擎来开发,因为方便多人协作开发+方便调试排错。

举个简单例子,APP 跑到某一步,突然崩了,此时完整的数据过程,都在数据库,你完全可以慢慢检查,最后用数据库,直接恢复现场。
HaibaraDP
180 天前
pipeline
xuanbg
180 天前
不需要什么设计模式。教你一个万能的应对方案,就是封装。以 OP 的实际需求为例,可以把每个步骤分别封装。譬如第二步会根据不同的类型采取不同的处理方式,那就在这一步的内部,根据数据类型来进行不同的分支流程。这样,变化就被限制在内部,从而不影响其他组件。
SuperDaFu
180 天前
责任链构建流程,每一个流程可以上命令/模板/策略维护自己的组件。
可以用消息来驱动整个流程运转
Pierro
180 天前
@laminux29 这个东西有没有例子可以看看
ilucio
180 天前
这就是工作流系统的典型实现,最近刚写过一个,用了责任链+策略模式,把责任链换成模板模式也可以,看具体需求了。我觉得这个需求里最难的是每个 step 的

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

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

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

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

© 2021 V2EX