Шаблон состояния документа Java? - PullRequest
2 голосов
/ 24 августа 2009

Я новичок в программировании на Java, и я хотел бы знать, существует ли какая-то распространенная практика для управления состоянием открытого документа (текущее состояние сохранено или нет), сохранения документа, открытия, создания нового документа и так далее. Как вы подходите к этому?

Прямо сейчас у меня есть небольшое приложение Swing, и у меня есть действия для открытия и закрытия документа и создания нового, но я не знаю, как управлять, если пользователь сохранил файл или нет (мне нужно это проверить, хочет ли пользователь создать новую или открыть существующую при работе с текущей.)

Есть ли какой-то шаблон для этого? Все советы очень приветствуются, так как я все еще учусь плавать с Java.

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Насколько я знаю, в Swing нет механизмов для управления состоянием документа. Вы должны сделать это самостоятельно. Но тогда, это не так много кода, который должен быть написан, и если у вас есть несколько различных документов в вашем приложении, вы можете поместить этот материал в абстрактный базовый класс.

Базовый подход уже обрисован в общих чертах: просто поместите «грязный» флаг в структуру данных вашего документа. Вам следует подумать о том, какие из ваших операций, таких как «создать», «открыть», «сохранить», «закрыть», должны изменить и оценить этот флаг. Я бы предложил диаграмму состояний (не обязательно вариант конечного автомата *1005* UML) в качестве инструмента для определения этого.

Если вам нужна более сложная функциональность, особенно отмена / повтор, взгляните на шаблон Memento . Большая часть кода, который должен быть написан при использовании этого шаблона, специфична для приложения и его структур данных (т. Е. Типов, которые вы создаете для управления документами), поэтому было бы трудно или невозможно эффективно обобщить это и поместить его в структуру как Swing или RCP.

2 голосов
/ 24 августа 2009

У вас есть логическая переменная isDirty, которая начинается с false.

Каждый раз, когда в документ вносится изменение, оно устанавливается в значение true с помощью кода.

Все остальные функции программы (открытие, сохранение, новые меню и т. Д. C) проверяют состояние этого логического значения прежде чем делать что-либо еще.

Таким образом, они также представляют знакомые диалоги: вы уверены, что хотите выйти, Discard ваши изменения e.t.c

Я использовал это несколько раз в реальных приложениях Swing

0 голосов
/ 24 августа 2009

Вы можете подумать о работе с временными версиями вашего документа (то есть вы открываете основной документ, но когда вы редактируете его, создается временный документ). В этом случае другой пользователь, который откроет тот же документ, увидит оригинальный документ. Как я знаю, это обычная практика ..

Но я не уверен, что вы хотите поддерживать такое сложное поведение ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...