Я думаю, что если вы получите 10 ответов, вы получите 11 ответов.: -)
Во-первых, нет необходимости в синглтоне.В этом сценарии это просто способ обмана с помощью глобальной переменной.А что происходит, когда вы хотите открыть два или три текстовых документа?
Имеют ли ваши меню свободный доступ к панели инструментов?Поскольку панель инструментов является родственным элементом текстовой панели, и в отношении 1-1 (я думаю?) Для панели инструментов несколько «разумно» знать о текстовом документе (иметь ссылку на него) и вспомогательном методе getTextDocument ().И кажется разумным, чтобы ваши виджеты знали об их непосредственном родителе, панели инструментов.
Это был бы мой способ решения проблемы - какие связи между объектами «имеют смысл».Вы хотите как можно меньше сцепления, но есть места, где вам нужно сцепление.Возможно, я неправильно понял вашу проблему, или, может быть, вы думаете по-другому, чем я, и в этом случае вы должны сделать это по-другому.Кроме того, вы делаете предположение о том, как ваш код может развиваться в будущем.Удачи с этим!: -)
Один большой вопрос для любого решения - меняется ли текстовый документ?(например, есть ли меню Файл-> Новое или меню Файл-> Открыть?).Если это так, это необходимо учитывать.В моем предложении JFrame в File-> Open создал бы текстовый документ и затем изменил бы ссылку на него в панели инструментов.
ps пуристы MVC - пожалуйста, добавьте соответствующие модели и контроллеры!Я только что говорил о графических компонентах, чтобы упростить задачу ...
pps Примеры «обдумывания» для разумных улучшений
- Будет ли это обрабатывать несколько JFrames, открытых одновременно?Да.
- Будет ли это обрабатывать один JFrame, но с несколькими документами (скажем, интерфейс с вкладками для текстового документа)?Почти.Метод должен быть немного умнее, чтобы знать, какой из многих документов активен, но вы легко можете себе представить, как это сделать.
- Как насчет того, когда мне нужно хранить гораздо больше информации о диктовке, например, имя(таким образом, Save дает хорошее значение по умолчанию), при последнем сохранении, является ли он "грязным", HTML или XHTML или что-то еще ... На данный момент, вы, вероятно, захотите добавить еще один слой модели.Но вы можете себе представить, что с еще одним уровнем косвенности (еще одной ссылкой) это нормально, так что это зависит от того, насколько вы близки к реализации # 3, как вы хотите проектировать.