Bạn nên có một bộ giao diện được xác định rõ ràng được phép truyền hoặc nhận tin nhắn - cung cấp cho chúng một tham chiếu đến EventScheduler là không đáng kể. Nếu không, hoặc nếu bạn cảm thấy điều đó liên quan đến việc chuyển lịch trình sự kiện sang "quá nhiều" loại khác nhau, thì bạn có thể gặp vấn đề về thiết kế lớn hơn (một sự phụ thuộc bừa bãi, mà những người độc thân có xu hướng làm trầm trọng thêm, không giải quyết được ).
Hãy nhớ rằng trong khi kỹ thuật chuyển bộ lập lịch tới các giao diện cần nó là một dạng " tiêm phụ thuộc ", thì trong trường hợp này bạn không tiêm một phụ thuộc mới . Đây là một phụ thuộc mà bạn đã có trong hệ thống, nhưng bây giờ bạn đang biến nó thành một phụ thuộc rõ ràng (so với sự phụ thuộc ngầm của một người độc thân). Theo nguyên tắc thông thường, các phụ thuộc rõ ràng sẽ được ưu tiên hơn vì chúng có nhiều tài liệu hơn.
Bạn cũng có khả năng linh hoạt hơn bằng cách tách riêng người tiêu dùng của lịch trình sự kiện với nhau (vì chúng không nhất thiết phải gắn với cùng một lịch trình), có thể hữu ích để thử nghiệm hoặc mô phỏng thiết lập máy khách / máy chủ cục bộ hoặc một số tùy chọn khác - bạn có thể không cần các tùy chọn khác này, nhưng bạn đã không nỗ lực để hạn chế một cách giả tạo bản thân khỏi chúng, đó là một lợi thế.
EDIT: Tất cả những gì tôi muốn nói khi tôi nói về việc vượt qua lịch trình xung quanh là thế này: nếu bạn có một thành phần trò chơi nào đó chịu trách nhiệm đối phó với sự va chạm, thì có lẽ nó được tạo ra thông qua một nhà máy phản ứng va chạm là một phần của lớp vật lý của bạn. Nếu bạn xây dựng nhà máy với một cá thể lập lịch, thì nó có thể chuyển thể hiện đó cho bất kỳ người trả lời nào mà nó tạo ra, sau đó có thể sử dụng nó để nâng cao các sự kiện (hoặc có thể đăng ký các sự kiện khác).
class CollisionResponderFactory {
public CollisionResponderFactory (EventScheduler scheduler) {
this.scheduler = scheduler;
}
CollisionResponder CreateResponder() {
return new CollisionResponder(scheduler);
}
EventScheduler scheduler;
}
class CollisionResponder {
public CollisionResponder (EventScheduler scheduler) {
this.scheduler = scheduler;
}
public void OnCollision(GameObject a, GameObject b) {
if(a.IsBullet) {
scheduler.RaiseEvent(E_BIG_EXPLOSION);
}
}
EventScheduler scheduler;
}
Đây rõ ràng là một ví dụ cực kỳ đơn giản và đơn giản vì tôi không biết mô hình đối tượng trò chơi của bạn là gì; tuy nhiên nó minh họa làm cho sự phụ thuộc vào bộ lập lịch sự kiện rõ ràng và cho thấy một số tiềm năng để đóng gói thêm (bạn không nhất thiết phải chuyển người trả lời lên lịch nếu họ giao tiếp với hệ thống phản ứng va chạm ở cấp độ cao hơn ở cùng cấp độ khái niệm như Nhà máy xử lý các loại hạt và bu lông gây ra sự kiện thông qua bộ lập lịch. Điều này sẽ cách ly từng triển khai phản hồi riêng lẻ với các chi tiết triển khai của hệ thống điều phối sự kiện, chẳng hạn như sự kiện cụ thể nào sẽ xảy ra khi va chạm, có thể lý tưởng cho hệ thống của bạn - - hay không).