(ВОПРОС МОЖЕТ СМОТРЕТЬ, КАК ДОЛГО ДОСТАТОЧНО, НО ПОЖАЛУЙСТА, ПРОСТО СМОТРИТЕ «ЧТО МНЕ НУЖНО СДЕЛАТЬ», чтобы узнать мой вопрос)
У меня есть приложение, использующее стратегию и шаблон MVC.
Графический интерфейс (ПРОСМОТР): Main.java.Он имеет набор текстовых полей в качестве входных данных.Также есть кнопка, которая вызывает функцию (toStrategy ()) в другом классе (Controller.java)
Controller.java - это класс CONTROLLER шаблона MVC.У него есть функция, вызывающая функцию callSearchFunction () в MainClass.java (это класс другого пакета (CONTEXT), импортированный с «import»).
МОДЕЛЬ построена вокруг двух классов(NodesList и Node) пакета CONTEXT (но это всего лишь подробности реализации).
[подробности реализации, это не мой вопрос] MainClass.java пакета CONTEXT является "Основной класс »Стратегии выкройки.Этот класс вызывает два метода (setAlgorithm и applyAlgorithm) для другого класса (SearchContext), и этот класс создает конкретную стратегию (создает экземпляр определенного класса SearchMethodX (x = имя алгоритма поиска), который реализует интерфейс SearchInterface, содержащий поиск метода abstarct())
Итак, сводка:
Наконец, функция (search () в классе SearchMethodX.java), вызываемая в классе, созданном с помощью callSearchFunctions, возвращает ArrayList.Функция search () также использует два ArrayList (с именем: Open, Closed).
Итак, последовательность вызовов (извините за очень длинное объяснение!) Имеет вид (синтаксис: Package.class.function ()): Main.Main при нажатии кнопки вызывает Main.Controller.toStrategy () -> Context.MainClass.callSearchFuncton () -> Context.SearchContext.setAlgorithm () и затем применяетAlgorithm () -> Context.SearchMethodX.search ()
Что мне нужно сделать: мне нужно вызвать (начиная с Main.Main) Context.SearchMethodX.search ().Это вернет ArrayList и будет использовать два вспомогательных ArrayList (Open, Closed) и изменит экземпляр Node и NodesList (который является одноэлементным классом, поэтому всего один экземпляр).
- Каждый раз, когда NodeОткрыто, Закрыто обновлено. Я должен напечатать их в Main.Main.
- Когда алгоритм завершит работу, вернет ArrayList, и я открою новую форму, где пользователь сможет перемещаться между результатами.
Что я знаю / думал для решения этой проблемы:
- search () каждый раз, когда обновляется Node, Open и Closed создадут экземпляр класса PartialResult (thisкласс будет содержать два ArrayList + Node и, в конечном итоге, больше переменных и функций).
- каждый SearchMethodX реализует интерфейс (в соответствии с шаблоном стратегии) и также реализует java.swing.SwingWorker.
- Класс PartialResult будетбыть «опубликованным» с помощью publish (), и результат будет возвращен и, наконец, показан в Main.Main
МОИ СОМНЕНИЯ / ПРОБЛЕМЫявляются:
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 () в графический интерфейс и, наконец, вывести результат с использованием методов получения класса PartialResult)
Конечно, любое предложение о том, как редактировать Стратегию / MVC / многопоточное Swing, принимается.
Я надеюсь, что мой вопрос ясен.
Заранее благодарю за любую подсказку.