java吧 关注:1,228,066贴子:12,686,410
  • 12回复贴,共1

java的老哥们,有个设计模式上的问题

只看楼主收藏回复

楼主是写c#上位机的,以前没详细学过设计模式,也没太在意这方面的八股文。
现在遇到难题了,c#吧太冷清,所以想问问java的老哥。
我这边是在代码里控制机械设备,一次作业任务里面有若干条动作。
每执行一个动作就要从plc读取一次状态,符合预期情况才能进行下一步,不然就要回滚动作,如果回滚不了就报故障。
以前的活很简单,用if+回调函数就能做完,但最近遇到个很复杂的活,一次作业任务有几十个动作,有上百状态,if嵌套太深了要重写。
以前没详细学过设计模式,
不知道该用什么设计模式可以减少耦合?


IP属地:广东来自Android客户端1楼2024-05-17 23:32回复
    @永记💕


    IP属地:广东来自Android客户端3楼2024-05-17 23:36
    回复
      使用有限状态机写 Fsm


      IP属地:湖北来自iPhone客户端4楼2024-05-17 23:49
      回复
        注意一共有四个状态 init prev current error 每个状态都会绑定一个事件 你的事件中封装 条件和执行 然后以事件依赖关系压栈 弹出栈被执行的事件


        IP属地:湖北来自iPhone客户端6楼2024-05-18 00:06
        收起回复
          我用js搓的话直接上链,就是数组里塞函数,然后foreach,遇到返回false的就执行一下回滚,感觉写起来也比较简单


          IP属地:安徽来自Android客户端7楼2024-05-18 00:14
          收起回复
            这个我看很适合流程编辑,你们没有开发这种工具么?完全可以可视化。


            IP属地:湖南来自Android客户端8楼2024-05-18 21:41
            收起回复
              就是流程编辑器。一个Action代表一个节点。


              IP属地:湖南来自Android客户端9楼2024-05-18 21:42
              收起回复
                在您描述的情况下,可以考虑使用状态模式和策略模式。这两种设计模式都能够减少耦合,提高代码的可维护性和扩展性。
                1. 状态模式:状态模式可以用来管理不同的设备状态,并根据状态的变化执行相应的动作。您可以为每个动作定义不同的状态,然后在状态之间进行切换。当执行一个动作需要检查设备状态时,您可以委托给当前状态对象来处理,从而将状态判断和动作执行分离,减少了if嵌套。状态模式可以让您更容易地添加新的状态和动作,同时减少了对于状态变化的耦合。
                2. 策略模式:策略模式可以让您将不同的状态检查和动作执行逻辑封装到不同的策略对象中,然后在运行时动态选择合适的策略来执行。这样可以避免过多的if-else嵌套,使得代码更加清晰和易于维护。
                通过状态模式和策略模式的结合应用,您可以将复杂的状态检查和动作执行逻辑进行有效的解耦,更好地管理和扩展系统的状态和动作。当然,这只是其中的一种思路,最终选择合适的设计模式取决于您的具体情况和需求。


                IP属地:福建来自Android客户端10楼2024-05-19 10:29
                回复
                  我之前写了一个状态机的 可以运用此类业务 注意理解start0


                  IP属地:湖北11楼2024-05-22 11:04
                  回复