Làm cách nào để kết hợp 'Lệnh' và 'Tổng hợp' để mô phỏng thời gian trễ?


9

Là một bài tập học tập (tôi không ở trường - chỉ là một ông già cố gắng học một cái gì đó mới), tôi đang cố gắng viết một mô phỏng cổng logic kết hợp độ trễ lan truyền. Người dùng cũng có thể nhóm các cổng lại với nhau để tạo các đối tượng cấp cao hơn.

Tôi muốn áp dụng các mẫu thiết kế cho vấn đề của mình, nhưng tôi đang gặp khó khăn.

Tôi đang đọc các mẫu thiết kế đầu tiên và tôi thấy rằng mẫu Command là một cách tốt để mô phỏng các xung điện thông qua một mạch có độ trễ. Tôi cũng thấy rằng mẫu Tổng hợp là một cách tốt để mô phỏng các đơn vị lồng nhau. Tôi chỉ không biết làm thế nào để trộn cả hai.

Nói cách khác, khi tôi vòng qua cổng, tôi thấy cánh cổng 'x' sẽ bắn. Nó có độ trễ 15 nano giây, vì vậy tôi tạo một lệnh có dấu thời gian 15 ns từ thời gian trò chơi hiện tại. Người điều phối ở đâu? Trong ví dụ về thực khách, với lệnh là 'Đặt hàng', nhân viên phục vụ và đầu bếp mỗi người gửi lệnh và có tùy chọn giới thiệu độ trễ. Nếu tôi có một cổng 'composite', nó cũng có bộ điều phối riêng phải không? Tôi có cần sử dụng Singleton để quản lý hàng đợi không?

Tôi đọc những gì tôi có thể tìm thấy, nhưng tôi vẫn cần một cú hích đúng hướng:


9
Mô hình là công cụ. Người ta không dùng búa và vít và nghĩ rằng tôi sẽ xây nhà. Thay vào đó, hãy bắt đầu xây dựng một ngôi nhà và nhận ra nơi một chiếc búa sẽ giúp công việc trở nên dễ dàng hơn.

Điều đó không trả lời chính xác câu hỏi của tôi. Tôi có một ứng dụng Java lớn đã được xây dựng, nó chuyển các thông điệp từ cổng này sang cổng khác. Tuy nhiên, tôi đang cố gắng kết hợp độ trễ lan truyền và tôi thấy rằng thiết kế ứng dụng của tôi không thể dễ dàng xử lý nó. Tôi đã hy vọng các mẫu thiết kế có thể giúp ...
Neil Mussett

4
Bạn đang tìm kiếm mô phỏng sự kiện riêng biệt - như cron nhưng không có thời gian 'thực'. Xây dựng cái này và sau đó nhận ra "oh, tôi đang xây dựng một hỗn hợp ở đây - tôi biết cách làm điều đó" hơn là đi và tìm cách nào đó để ghép một hỗn hợp vào giải pháp.

1
Cụ thể, bạn có thể tìm thấy Cấu trúc dữ liệu hiệu quả cho Bộ sự kiện mô phỏng từ Truyền thông của ACM tháng 8 năm 1977, Tập 20, Số 8 khá hữu ích (một tìm kiếm google cho tiêu đề này sẽ xuất hiện pdf - Tôi gặp sự cố khi liên kết đến nó) - nó đi qua khái niệm thực hiện cấu trúc dữ liệu được cải thiện đáng kể qua danh sách được lập chỉ mục.

1
Đây là một liên kết đến giấy ACM được lưu trữ tại citeseerx.
Frank

Câu trả lời:


1

Bạn có thể muốn xem một ví dụ từ Lập trình trong Scala , vì họ có một trình giả lập thực hiện những gì bạn đang cố gắng thực hiện trong Java:

http://www.cs.helsinki.fi/u/wikla/OTS/Saluto/examples/html/ch30.html#sec6

Bằng cách nhìn vào cách tiếp cận của họ, bạn có thể tìm thấy cách thay đổi chương trình của mình để có được hành vi bạn muốn.

Bạn đã đề cập rằng bạn không thể thêm nó một cách dễ dàng, vậy tại sao không giải thích cách tiếp cận của bạn là gì và khó khăn mà bạn gặp phải là gì, để mọi người có thể đưa ra cho bạn một số gợi ý mà bạn có thể chưa xem xét.

Như đã đề cập, các mẫu thiết kế là cách để nói về những gì mã của bạn đang làm, như một cách viết tắt, nhưng ý tưởng cố gắng buộc các mẫu thiết kế chỉ có vẻ là một ý tưởng tồi.

Về cơ bản, độ trễ lan truyền không nên khó.

Bạn có thể có một lớp cơ sở Gate, và cô ấy bị trì hoãn.

Tất cả các cổng mở rộng từ điều này, và đặt độ trễ thực tế.

Bây giờ, khi bạn đang theo dõi tín hiệu, khi ở trong cổng, luồng đó có thể ngủ trong độ trễ mô phỏng, nhưng điều này cũng có nghĩa là bạn cần ánh xạ thời gian thực theo thời gian mô phỏng của mình, vì trình giả lập của bạn sẽ chậm hơn hệ thống thực sẽ là

Nếu bạn thấy rằng bạn có quá nhiều chủ đề, thì chỉ cần đưa vào một danh sách đã được sắp xếp, bằng cách tiếp theo lên trên và khi bạn tạm dừng, chỉ cần đặt thời gian trì hoãn và trên mỗi vòng lặp, trình giả lập sẽ chọn những chủ đề đã sẵn sàng , thực hiện hành động tiếp theo, và sau đó sự chậm trễ tiếp theo xảy ra.

Điều này sẽ tương tự như một vòng lặp trò chơi.


0

Nói cách khác, khi tôi vòng qua cổng, tôi thấy cánh cổng 'x' sẽ bắn.

Sau đó, bạn không sử dụng mẫu lệnh.

Nếu tôi có một cổng 'composite', nó cũng có bộ điều phối riêng phải không?

Chúa ơi Toàn bộ điểm của mẫu tổng hợp là bạn có thể cung cấp một đối tượng tổng hợp cho một vị trí chỉ mong đợi một đối tượng. Điều này cho phép bạn soạn thảo hành vi một cách lành mạnh.

Tôi có cần sử dụng Singleton để quản lý hàng đợi không?

Trời ơi không. Bạn chỉ có một đầu bếp và một cô hầu bàn trên toàn thế giới? Họ chỉ có một nhà bếp?

Trộn lệnh và mẫu tổng hợp khá đơn giản. Bạn có một số giao diện đại diện cho một lệnh. Mỗi lệnh cụ thể có thể ghi đè (hoặc nói cách khác là thỏa mãn nó bằng các ngôn ngữ không kế thừa) giao diện đó để cung cấp một số hành vi. Sự chậm trễ của bạn là một trong những hành vi đơn giản như vậy.

Mẫu tổng hợp cung cấp hai (hoặc nhiều) đối tượng / hành vi đằng sau một giao diện. Việc sử dụng đơn giản nhất cho ví dụ này sẽ là một lệnh tổng hợp nhận hai lệnh khác và sau đó khi được yêu cầu thực thi, sẽ kích hoạt hai lệnh được lưu trữ. Bằng cách này, bạn có thể nhận lệnh 'delay' bị cô lập và bất kỳ lệnh nào khác tùy ý để tạo lệnh bị trì hoãn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.