Отказ от ответственности: конечно, есть много способов разработать архитектуру классов приложения, поэтому следующее - это только один из способов (но не худший) сделать это.
У меня сложилось впечатление, что вы не приняли концепцию объектно-ориентированного проектирования и программирования.
Если вы опишите (игровое?) Приложение кому-то еще, вы наверняка будете использовать множество существительных и глаголов.Основное правило - делать классы из существительных, а методы - из глаголов.Я предполагаю, что слова «Controls» (особенно во множественном числе) и «GamePlay» не будут самыми заметными в вашем описании, поэтому не начинайте с этого.Вместо этого я ожидал бы существительные, такие как «Игрок», «Доска» или «Фигура», и глаголы, такие как «двигаться», «собирать», «стрелять» или что-то еще о вашей игре.Для глаголов, ставших методами, вы должны решить, к какому классу они принадлежат, и вы делаете это, главным образом, отвечая на вопрос, кто или что является предметом предложения, поэтому, например, move()
должен стать методом Figure
,так как движется не доска или игрок, а фигура на доске.
При дальнейшем проектировании классов сконцентрируйтесь на внутренней работе («бизнес-логике») сущностей, а не напользовательский интерфейс - он должен храниться в разных классах.
Итак, приличный дизайн такого приложения может иметь класс GamePlay
с рабочим процессом верхнего уровня приложения, но GamePlay
не должениметь любые элементы пользовательского интерфейса (javax.swing. *) в нем.Пользовательский интерфейс (возможно, что-то вроде вашего Controls
класса) должен взаимодействовать с GamePlay
и его компаньонами только путем вызова некоторых из их методов, а не путем чтения полей.
PS Что касается вопросов по StackOverflow: предпочтительнеескопируйте части реального кода в вопросы, чтобы избежать опечаток, таких как Jfarme
вместо JFrame
.