У меня есть специализированный класс объектов, который отправляет сообщения своим компонентам, чтобы они могли поменять себя по мере необходимости. Класс объекта позволяет мне смешивать и сопоставлять компоненты, чтобы я мог иметь разные объекты с одинаковой функциональностью, не имея большого дерева наследования. (Я думаю, что это называется компонентом шаблон.) Вот что я хочу сделать:Как реализовать систему отправки сообщений?
//MyObject.java
public class MyObject {
private HashSet<MyComponent> components_;
void send(Message message) {
for (MyComponent component : components_) {
component.receive(message);
}
}
// other unrelated methods and variables...
}
// MyComponent.java
public interface MyComponent {
public void receive(Message message);
// other unrelated methods...
}
// RendererComponent.java
public class RendererComponent implements MyComponent {
public void receive(Message message) {
if (message.getType() == Message.Type.POSITION_CHANGED) {
Point positionDifference = message.getInfo();
redraw(positionDifference);
} else if (message.getType() == Message.Type.SCORE_CHANGED) {
Integer score = message.getInfo();
redraw(score);
} // else if...
}
private void redraw(Point positionDifference) {
// draws item at new position...
}
private void redraw(Integer score) {
// draws the new score...
}
// other unrelated methods and variables..
}
У меня есть много компонентов, и они получают множество различных типов сообщений. Как написать свой класс Message, чтобы я мог получать от него информацию о разных типах классов? Нужно ли мне изменить способ обработки сообщений моим классом?
Я не совсем понимаю, что вы подразумеваете под «Как написать свой класс сообщений, чтобы я мог получать от него информацию о разных типах классов?». Может быть, вы могли бы привести пример проблемы, которую вы пытаетесь решить? –
@AlexLynch Я хочу, чтобы мой метод getInfo() в моем классе Message возвращал разные данные с разными типами классов (как показано в моем примере RendererComponent), чтобы информация могла обрабатываться по-разному. – Eva
Я не предполагаю, что ваш getInfo() может просто вернуть объект? До тех пор, пока вы используете getType() для подтверждения типа объекта, который вы получаете, я не предвижу никаких проблем с безопасностью типа - или он будет обескуражен, независимо от того, что он не является очень безопасным для типа? –