Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这个多线程场景中使用哪种设计模式?_Java_Multithreading_Design Patterns_Main - Fatal编程技术网

Java 在这个多线程场景中使用哪种设计模式?

Java 在这个多线程场景中使用哪种设计模式?,java,multithreading,design-patterns,main,Java,Multithreading,Design Patterns,Main,我有3种算法——让我们称它们为A、B、C。每种算法都有自己的getter和setter方法,例如A可能有getA()/setA()同样适用于B和C。 有一个MainDriver类,它根据作为命令行参数传递给该MainDriver类的内容,创建a、B或C的实例。 MainDriver类创建多个线程来执行创建其实例的算法的方法。因此,当创建此算法实例时,它会将此实例传递给扩展Thread类的类,以便每个线程都可以执行该算法的公共方法。 现在我的问题是我应该使用哪种设计模式来实现这个架构 thread

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

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


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

首先,您可以为所有的algirithms创建一个层次结构。e、 g.BaseAlgo是接口,所有具体的算法都将实现相同的接口


线程子类可以引用BaseAlgo(“具有关系”),并且可以调用传递给它的具体Algo对象上的方法。

任何面向事件/异步的“体系结构”都可以很容易地解决问题,使您能够专注于业务代码而不是机制

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

  • 根据参数,执行特定程序
  • 所选程序必须在单独的线程中执行
例如,Reactor(现在与Spring的最新版本完全集成)以面向事件的编程风格提供了许多方法来实现这一点

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

  • 如果上传你的代码会更好。这个问题更多的是基于观点。你的问题的答案会随着要求而改变。查阅四人帮关于设计的书patterns@GabrieleB-大卫:“查找四人帮的书”-不是很有帮助@初学者萨克:我同意,但是考虑到这些要求,你的意见是什么?@shryasgokhale在stackoverflow上发布之前,你应该对你的问题进行研究,而不是仅仅告诉你去看我建议的资源页面,这样你就可以找到你问题的答案。谁知道呢,如果你真的找到了GoF的书,你可能会学到比你想要的答案更多的东西