Tại sao tôi cần sử dụng Chuỗi trách nhiệm, nếu tôi có thể tải tất cả lệnh vào một số vùng chứa và chỉ thực hiện từng lệnh một. Điều này sẽ làm cho một chuỗi xử lý một yêu cầu liên tiếp. BTW Tôi cảm thấy rằng nó tốt hơn CoR vì bạn có thể loại bỏ một số lệnh cụ thể hoặc thay thế bằng một lệnh khác trên thời gian chạy, trong khi đối với CoR, bạn cần tạo một chuỗi khác để thay đổi thứ gì đó trong chuỗi vì bạn không có quyền truy cập vào các phần tử trong chuỗi ngoại trừ phần tử đầu tiên. (Đó là, trên thực tế, một danh sách liên kết đơn.)Chuỗi trách nhiệm vs Lệnh trong hàng đợi hoặc ngăn xếp
Trả lời
Chỉ cần để "giữ cho nó đơn giản ngớ ngẩn" :-)
Tạo một danh sách/stack khi bạn đặc biệt cần đến nó, và bạn sẽ biết khi nào bạn cần nó phải không?
Đối example- nếu bạn phải làm một số thao tác dữ liệu đơn giản như:
data.clean().format().save();
vs
commands.push(new Cleaner(data));
commands.push(new Formatter(data));
commands.push(new Updates(data));
commands.execute();
cũng nhận thấy, tôi đã phải viết mã hơn để tạo ra cấu trúc dữ liệu mới (lệnh ngăn xếp).
Nhưng hãy nói rằng đó là điều gì đó mang tính chiến lược hơn, ví dụ như trò chơi bắn súng. Người chơi có thể bị bắn, giết chết, vv, và kết quả phụ thuộc vào mức độ khó chọn của trò chơi.
headShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new KillPlayer());
bodyShot = new Command();
headShot.push(new FreezePlayer());
headShot.push(new BleedPlayer());
headShot.push(new LooseHealth());
player.onHit = function(hitPoint){
hitPoint.aboveNeck() ? headShot.on(this) : bodyShot.on(this);
};
Lưu ý trong trường hợp này, chúng tôi phải tạo một chiến lược có thể được truyền đi và xảy ra khi chạy.
Vì vậy, khi ở chế độ đơn giản, bodyShot có thể không có phần tử cuối cùng (LooseHealth) và headShot có thể có LooseHealth thay vì KillPlayer làm phần tử cuối cùng.
Hy vọng điều đó sẽ hữu ích.
Tôi không nghĩ CoR yêu cầu danh sách được liên kết đơn lẻ. Đó có thể là một triển khai phổ biến; nhưng một danh sách được liên kết gấp đôi hoặc hầu như bất kỳ bộ sưu tập/vùng chứa nào khác có thể được sử dụng, miễn là nó tách riêng người gửi thư khỏi (các) người nhận thư. Những gì bạn mô tả âm thanh hoàn toàn tương thích với mẫu CoR. Bạn vừa tăng cường khả năng định cấu hình Chuỗi. Điều quan trọng cần lưu ý là các GoF definition dạy chúng ta để thực hiện các chuỗi,
mà không cần mối quan hệ xử lý cứng hệ thống dây điện và ưu tiên,
... nhưng tôi không nghĩ rằng nên hạn chế sự lựa chọn của chúng ta về bộ sưu tập cho các trình xử lý.
Cũng lưu ý rằng Chuỗi trách nhiệm không giống như chuỗi xử lý. Hàm sau ngụ ý các phép toán tuần tự (tức là một số pipeline) trong khi trước đây là phân cấp nhưng không nhất thiết phải tuần tự. Bất kỳ số nào và kết hợp các trình xử lý (hoặc không có số nào trong số chúng) có thể hành động theo một yêu cầu duy nhất.
Cuối cùng, tôi giả sử việc sử dụng từ "lệnh" trong câu hỏi là tham chiếu đến các trình xử lý trong Chuỗi và không tham chiếu đến số Command Pattern. Các mẫu CoR và Command có thể bổ sung về các yêu cầu đối với Chuỗi, nhưng theo truyền thống không phải là các lệnh như trình xử lý.
- 1. Ngăn xếp và Hàng đợi, Tại sao?
- 2. Thực hiện chuỗi biến đổi trách nhiệm
- 3. asyncio và coroutines vs hàng đợi nhiệm vụ
- 4. Có hàng đợi và bộ sưu tập ngăn xếp không?
- 5. Trong MVP là onClick trách nhiệm của View hoặc Presenter?
- 6. Perl - chịu trách nhiệm forking
- 7. Ngăn xếp, hàng đợi và danh sách liên kết
- 8. Trách nhiệm của một ViewModel
- 9. Hàng đợi chuỗi Android
- 10. đơn Trách nhiệm và phụ thuộc
- 11. C# Chuỗi trách nhiệm với các đại biểu
- 12. Hàng đợi nhiệm vụ thử nghiệm đơn vị trong AppEngine
- 13. Trách nhiệm duy nhất trong smalltalk
- 14. Status 405 từ hàng đợi nhiệm vụ
- 15. Nhiệm vụ xếp hàng với RxJava trong Android
- 16. Trách nhiệm của ai là điều chỉnh yêu cầu web?
- 17. Hàng đợi xếp hạng cần thiết bao gồm các nhiệm vụ lỗi thời
- 18. Ai chịu trách nhiệm triển khai?
- 19. Hàng đợi FIFO (hoặc ngăn xếp) được triển khai trên đĩa, không phải ram (tốt nhất là trong C++)
- 20. Trách nhiệm của JVM bytecode verifier
- 21. Trách nhiệm và kết hợp đơn lẻ
- 22. Đối với một nhiệm vụ xác nhận lớn là chuỗi trách nhiệm mô hình một đặt cược tốt?
- 23. Trong ứng dụng Ext JS 4 MVC, điều gì sẽ chịu trách nhiệm tải cửa hàng?
- 24. Khóa ngăn xếp và xếp hàng miễn phí trong C#
- 25. Hàng đợi tin nhắn so với sự khác biệt hàng đợi của nhiệm vụ
- 26. Chuỗi trách nhiệm - chuyển yêu cầu qua tất cả các chuỗi
- 27. Sắp xếp lại các div một cách có trách nhiệm với Twitter Bootstrap?
- 28. Jquery, ngăn chặn hoạt ảnh xếp hàng
- 29. Thả chuỗi và xếp hàng
- 30. Tkinter: Đợi mặt hàng trong hàng đợi
Điều nào đơn giản? COR hoặc ngăn xếp? Đối với tôi cả hai đều giống nhau sh * t. – Narek
okay, xem câu trả lời đã chỉnh sửa ở trên – Nishant
Bạn đã so sánh chồng với định dạng tĩnh 'data.clean().(). Save();'. Nhưng tôi đã yêu cầu stack vs COR, vì các thay đổi thời gian chạy có thể được thực hiện trong cả hai, như trong COR, bạn có thể tạo ra các chuỗi mới. – Narek