(问题可能看起来很像很长,但我只能看“我需要做什么”,看看我的问题是什么)
我有一个使用策略和MVC模式的应用程序。
GUI(VIEW)是:Main.java。它有一组文本框作为输入。还有一个按钮可以调用另一个类中的函数(toStrategy())(Controller.java)
Controller.java是MVC模式的CONTROLLER类。它有一个函数调用MainClass.java中的函数callSearchFunction()(这是用“import”导入的另一个包(CONTEXT)的类。)
MODEL围绕包CONTEXT的两个类(NodesList和Node)构建(但这只是一个实现细节)。
[实现细节,这不是我的问题] CONTEXT包的MainClass.java是Strategy模式的“主类”。此类在另一个类(SearchContext)上调用两个方法(setAlgorithm和applyAlgorithm),并且此类创建具体策略(创建特定类SearchMethodX(x =搜索算法的名称)的实例,该实现实现包含abstarct方法搜索的接口SearchInterface ())
所以,摘要:
Package Main(默认包):
包上下文(实现策略模式的包)
最后,在callSearchFunctions实例化的类中调用的函数(SearchMethodX.java类中的search())返回一个ArrayList。 函数search()也使用两个ArrayList(命名为:Open,Closed)。
所以调用排序(抱歉很长的解释!)是(syntaxis:Package.class.function()): Main.Main on按钮按下调用Main.Controller.toStrategy() - > Context.MainClass.callSearchFuncton() - > Context.SearchContext.setAlgorithm()然后applyAlgorithm() - > Context.SearchMethodX.search()
我需要做什么: 我需要调用(从Main.Main开始)Context.SearchMethodX.search()。这将返回一个ArrayList并将使用两个auxilairy ArrayList(Open,Closed)并将修改Node和NodesList的实例(这是一个单例类,因此只有一个实例)。
我知道/想到解决这个问题的是:
我的疑惑/问题是:
1)看起来应该像SearchMethodX? 我想会是这样的:
public void SearchMethodX implements SearchInterface,SwingWorker<ArrayList<Node>,PartialResult>{
// ArrayList = return value , PartialResult = class containing partial results
ArrayList<Node> search(){
// publish partially results and returns final result
}
// other methods/variables
}
但是我应该把doInBackground()和done()方法放在哪里(根据java文档:http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html和http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html覆盖SwingWorker抽象方法)? 在哪里编写publish()和get()方法?
2)我应该如何“追溯”部分结果? (我的意思是:将PartialResult实例从search()方法传递给GUI,最后使用PartialResult类的getter打印结果)
当然,任何关于如何编辑策略/ MVC /多线程Swing的建议都被接受了。 我希望我的问题很明确。
提前感谢您的任何提示。