Как правильно реализовать связь между объектами Java? - PullRequest
0 голосов
/ 19 марта 2010

Я работаю над академическим проектом, который имитирует довольно большую процедуру очередей в Java. Ядро симулятора лежит в одном пакете, где существует 8 классов, каждый из которых реализует одну концепцию. Каждый класс в проекте следует SRP. Эти классы инкапсулируют поведение симулятора и соединяют все остальные классы в проекте.

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

Ответы [ 3 ]

1 голос
/ 19 марта 2010

Звучит, что у вас сложный конечный автомат. Вы можете абстрагировать вызовы методов между объектами как асинхронные события. Вместо непосредственного вызова метода для других объектов каждый объект может отправлять общие события в объект «маршрутизатора». Объект маршрутизатора будет перенаправлять событие любому числу объектов, которые зарегистрировали своих слушателей на маршрутизаторе. Вы можете реализовать фильтры в слушателях или в алгоритме маршрутизатора, чтобы ограничить, кто получает события. Изменения состояния также будут публиковаться как события.
Если вы используете JMS-сервер в качестве «маршрутизатора», вы можете даже распределить свои объекты по нескольким хостам.
Этот подход обеспечивает простой, многократно используемый интерфейс между вашими объектами в форме общей схемы / интерфейса событий.

0 голосов
/ 19 марта 2010

Задумывались ли вы об использовании интерфейсов для разделения классов? У вас есть восемь классов, но, возможно, вам понадобится всего несколько интерфейсов, чтобы обеспечить взаимодействие / взаимодействие между ними и получить большую гибкость.

0 голосов
/ 19 марта 2010

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

Это нормально. Наименьшей единицей реализации (вне отдельных классов) для компонентов Java является пакет. Классы в пакете могут быть тесно связаны. Просто убедитесь, что соединение не протекает снаружи (например, используйте классы, защищенные пакетами).

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

Если у каждого из этих восьми классов должен быть экземпляр всех остальных семи классов, возможно, способ разделения функциональности по классам не годится. Если у каждого класса есть только одна область ответственности, почему возникает такая сильная взаимозависимость?

Это классы с состоянием? Или просто набор методов, которые могут быть статичными?

Но, опять же, пока общедоступный интерфейс этого пакета выглядит нормально, я бы не сильно волновался. Нужно ли знать код клиента о восьми классах?

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