【问题标题】:My own Java application which can be customized [closed]我自己的可以定制的Java应用程序[关闭]
【发布时间】:2012-06-22 10:37:24
【问题描述】:

我打算使用 java 应用程序来实现一个流程。该过程有不同的阶段。每个阶段都有一个输入和输出。

所以它类似于 input1=>phase1=>outpu1=>phase2=>output2=>phase3=>final_output

我想编写一个 java 应用程序,用户可以在其中扩展任何阶段来实现自己的功能。

例如:假设 phase1 对给定的输入进行排序。我想让我的应用程序用户创建自定义类来替换阶段 1 的功能。他们可能想要计数而不是排序。

关于如何做到这一点的任何想法?插件架构?任何以类似方式工作的框架示例?从哪儿开始? 编辑: 输入来自用户。让我们说我的应用程序需要一组数字并进行排序(阶段1)然后删除重复项(阶段2)和添加(阶段3)并给出输出。 现在我希望这些阶段是可定制的。可能是通过允许他们定义自己的类来做其他事情。

【问题讨论】:

  • 到目前为止你尝试过什么?你有什么具体的问题想问吗?因为,这类问题在 SO 上通常不受欢迎。更多详情请查看常见问题:stackoverflow.com/faq
  • 我的问题很模糊,因为我很模糊。但答案正在帮助我变得更加清晰。

标签: java architecture customization extends plugin-architecture


【解决方案1】:

我认为您的问题过于笼统,无法提供框架。话虽如此,你可以看看Strategy Pattern(更多here)。

该模式的目的是定义行为,然后将这些行为作为方法参数传递。这将允许您使用一种方法执行多项操作,具体取决于您传递的参数类型。

但请注意,在我看来,使用相同的方法进行排序和计数会导致问题。理想情况下,每个方法至少应该执行一些类似的操作,因此对于排序,您可以使用进行升序和降序排序的方法,然后使用另一种进行计数的方法。

【讨论】:

【解决方案2】:

解决方案的一个想法:Phase 是一个带有 process() 方法的接口,可以用任何算法实现。这个 process() 方法可以有一个 Output 返回类型,并以另一个 Output 作为参数,而 Output 另一种类型(类或接口)。还有一个 Executor 类,它将执行整个过程,带有一个使用阶段列表的 execute() 方法,使用每个阶段的返回输出作为下一个阶段的输入。唯一悬而未决的问题是:第一阶段的输入是什么?

【讨论】:

  • 帮助我获得了更多的想法。非常感谢
【解决方案3】:

你的问题太模糊了,你可以通过一个方法的通用接口来实现。

“阶段”或阶段不能同时发生是否有特殊原因?

或者您可以实现更复杂的东西,例如基于 JMS 的框架或使用 SEDA 之类的东西

【讨论】:

  • 如果每个阶段都需要前一阶段的输出,我看不出不同阶段如何同时处理……
  • 如果每个阶段都需要完整的输出是的。但是,通常情况下,您可以在输入完全生成之前开始处理它。例如想想grep word file | grep -v stopword | cut -d/ -f2 | sort | uniq -c | sort -n | tail
  • 有趣的想法。你知道任何让你这样做的模式吗?
  • 任何基于队列的数据传递方式,例如JMS、BlockingQueues、环形缓冲区、套接字、管道。您甚至可以通过这种方式使用文件。
  • 您需要能够分段处理数据,例如一行,一条记录,一个数据块。许多流或事件驱动的处理模型使用这种方法。想象一下,您正在流式传输直播电视,您希望看到它发生的样子,因为等待电视馈送结束是没有意义的。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多