我有一個專門的對象類,發送消息到其組件,以便他們可以根據需要更改自己。對象類允許我混合和匹配組件,這樣我就可以擁有具有類似功能的不同對象,而不需要很大的繼承樹。 (我想這就是所謂的組件模式。)這是我想做的事:如何實現消息發送系統?
//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我希望我的Message類中的getInfo()方法返回具有不同類類型的不同信息(如我的RendererComponent示例所示),以便可以用不同方式處理信息。 – Eva
我不認爲你的getInfo()可以返回一個Object?只要您使用getType()來確認您所接收的對象的類型,我不會預見任何類型安全問題 - 或者不管類型安全性如何,都不會泄氣? –