Lớp ứng dụng/Chế độ xem của tôi có hệ thống điều phối sự kiện còn gọi là bảng đen. Trong đó người nghe được lưu trữ bởi một hashmap với các phím là các loại sự kiện được triển khai như một EventType enum và các giá trị là các tham chiếu listener lắng nghe kiểu sự kiện này. Ví dụ. một đối tượng mô hình đang nghe loại sự kiện "LOCAL_PLAYER_INPUT", quy trình bảng đen và thông báo cho trình phát vì trình phát triển khai giao diện EventHandler.Xử lý sự kiện được đóng gói với Enums
Tôi muốn tách riêng mô hình của mình bằng cách triển khai bảng đen độc lập cho mô hình. Sau đó nó sẽ được thêm vào như một người nghe đến bảng lớp ứng dụng kể từ khi lớp ứng dụng nhận được I/O từ bàn phím hoặc chạm. Mô hình bảng đen sẽ tự đại diện các sự kiện hơn nữa sau đó. Đối với điều này tôi muốn tạo ra một hệ thống phân cấp enum nơi sự kiện được phân loại theo cách này:
MODEL.LOCAL.PLAYER_INPUT
Mẫu sẽ được đăng ký là người biết lắng nghe theo quan điểm đen chỉ bằng cách đi qua MODEL như thế này:
addListener(model.blackboard, MODEL); //Types: (EventHandler, EventType)
Bằng kết hợp các giao diện với enums tôi đã đạt được, rằng tôi có thể viết eventtypes như MODEL.XY nhưng nó sẽ không được chấp nhận bởi addListener mặc dù MODEL đang triển khai giao diện EventType.
Tôi nên làm gì?
EDIT: Một số mã khác
addListener Phương pháp:
public void addListener(EventHandler handler, EventType eventType) {
getListener(eventType).add(handler);}
private Array<EventHandler> getListener(EventType eventType) {
if(map.containsKey(eventType))
return map.get(eventType);
else {
Array<EventHandler> tmp = new Array<EventHandler>(false, 1, EventHandler.class);
map.put(eventType, tmp);
return tmp;
}
}
Enums:
public interface WL extends EventType {
public static enum LOCAL {
PLAYER_INPUT,
NPC_INPUT
}
}
GameEvent:
public GameEvent(EventType eventType, Object message) {
this.eventType = eventType;
this.message = message;
timeStamp = System.currentTimeMillis();
}
Vì khóa của bạn là enums, bạn nên cân nhắc sử dụng 'EnumMap'. Mặc dù tôi tin rằng đây không phải là hiệu suất thực sự quan trọng ở đây – fge
Đó là một mẹo hay, tôi sẽ thực hiện nó, cảm ơn! –
Một số mã khác sẽ hữu ích. Làm thế nào để enum của bạn (s) trông giống như, trình biên dịch phàn nàn về những gì? – lost