【问题标题】:Which Design Pattern to use in this multi-threaded scenario?在这种多线程场景中使用哪种设计模式?
【发布时间】:2017-07-04 08:22:39
【问题描述】:

我有 3 种算法 - 我们称它们为 A、B、C。每一种都有自己的 getter 和 setter 方法,例如A 可能有 getA()/setA() B 和 C 也是如此。 有一个MainDriver 类,它根据作为命令行参数传递给此MainDriver 类的内容创建A、B 或C 的实例。 MainDriver 类创建多个线程来执行创建其实例的算法的方法。因此,当创建此算法实例时,它会将此实例传递给扩展 Thread 类的类,以便每个单独的线程都可以执行该算法的公共方法。

现在我的问题是我应该使用哪种设计模式来实现这个架构?

线程类如何知道哪个算法实例作为参数传递给它,以及相应地执行哪个 getter 和 setter 方法?

【问题讨论】:

  • 上传你的代码会更好。这个问题更多是基于意见。您的问题的答案会随着要求而改变。
  • 查找关于设计模式的四本书的帮派
  • @GabrieleB-David:“四本书的查找帮派”——不是很有帮助!
  • @BeginnersSake:我同意,但是考虑到这些要求,你的意见是什么......
  • @ShreyasGokhale 在 stackoverflow 上发帖之前,您应该对您的问题进行研究,而不是仅仅告诉您去查看 how to ask 页面,我建议了一个资源,以便您找到问题的答案。谁知道呢,如果你真的找到了 GoF 的书,你甚至可能会学到比你正在寻找的答案更多的东西

标签: java multithreading design-patterns main


【解决方案1】:

首先,您可以为所有算法创建层次结构。例如BaseAlgo 是接口,所有具体的算法都将实现相同的。

您的 Thread 子类可以引用 BaseAlgo("has a relationship") 并且您可以调用您传递给它的具体 Algo 对象的方法。

【讨论】:

    【解决方案2】:

    任何面向事件/异步的“架构”都可以轻松解决您的问题,让您能够专注于业务代码而不是机制。

    如果我错了,请告诉我,但我们可以像这样恢复您的规格:

    • 根据参数,执行特定程序
    • 所选程序必须在单独的线程中执行

    例如,Reactor(现在与 Spring 的最新版本完全集成)以面向事件的编程风格提供了许多方法来执行此操作。

    1. 已经为您处理了多线程。您只关心池的配置(如果您需要特定的行为,但默认行为会符合您的要求)
    2. 您只开发您的“算法”组件,这只不过是执行某些特定代码的组件。这些组件中的每一个都侦听主程序抛出的特定事件。没有别的了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多