Немного сложно ответить на этот вопрос, не видя фактического кода, но я все равно попробую. Может быть, если бы вы могли каким-то образом поделиться своим кодом, через Github, Bitbucket, как Gist или в Pastebin, я мог бы дать лучший ответ. Тогда также лучше сделать это в CodeExchange CodeReview вместо StackOverflow.
В целом, я нахожу подозрительным, что из родительских классов GUI существует так много extends
. Использование по расширению может быть немного anti-pattern. В первую очередь это может привести к кажущемуся простому коду в крошечных приложениях, но в конечном итоге он имеет тенденцию к запутыванию исходного кода, поскольку он поощряет сочетание бизнес-логики и пользовательского интерфейса. Это недоразумение, что расширение является ядром ООП. Это не. Полиморфная абстракция для развязки и инверсии ключевых зависимостей, это ядро ООП. Расширение - это просто приятное и удобное дополнение к этому, и это чрезмерно.
Говоря об этом, возможно, вы слышали о MVC - Model View Controller. Это типичный образец для пользовательских интерфейсов, чтобы держать вещи в отдельности.
Вы не хотите, чтобы ActionListener
реагировал на действие load
, чтобы непосредственно знать CodePanel
, поскольку такая зависимость слишком конкретна. Вы хотите иметь абстракцию между ними, как интерфейс, и ссылаться на этот интерфейс вместо CodePanel
.
Что касается ActionListener
и аналогичных интерфейсов, возможно, вам будет интересно перейти на Java 8, если вы еще не сделали этого. Интерфейсы, такие как ActionListener
с помощью всего одного абстрактного метода, являются неявно функциональными интерфейсами, что означает, что вы можете использовать ссылки lambdas или методы.
В целом, я думаю, что это помогает всегда помнить о следующем вопросе: Что делать, если я заменю набор инструментов пользовательского интерфейса другой? Даже если это не прецедент и никогда не произойдет, разделение и разделение опасений, которые вы делаете, чтобы ответить на этот вопрос, приводят к более модульным, лучшим проектам, которые легче понять и поддерживать.В конце концов, вопрос Что делать, если я заменю набор инструментов пользовательского интерфейса другой? приводит к дизайну, который следует за многими принципами SOLID.
Имея дело с ActionListener
в Swing, вы можете посмотреть на interface Action
и abstract class AbstractAction
. Они предлагают очень интересные возможности. Используемые в правильном направлении, они могут упростить код.
Посмотрите шаблон «MVC» - ваше приложение имеет модель, которая привязана к элементам пользовательского интерфейса, поэтому вы можете изменить модель, и модель распространяет изменения в пользовательском интерфейсе. – Smutje
Я тоже об этом подумал. Я не знал, лучше ли это. Но я попробую. Благодарю. – mubuss
@PaulJabines Нет лучшего подхода в целом. Google MVVM, MVP, MV? а также: Какой подход наиболее подходит, отличается от случая использования для использования в случае – drewmoore