Giống như với nhiều mẫu thiết kế, bạn có thể triển khai mẫu này làm chức năng trong clojure. Nó phụ thuộc một chút vào cách bạn đại diện cho nhà nước trong chương trình của bạn (refs, nguyên tử, đại lý) thông qua quá trình này là rất giống nhau.
Bạn có thể chỉ cần thêm chức năng xem vào trạng thái của bạn tác nhân/ref/atom thêm trạng thái vào danh sách hoàn tác mỗi khi có bản cập nhật. sau đó chức năng hoàn tác của bạn chỉ hiển thị trong danh sách hoàn tác. Điều này có tác dụng tốt đẹp khi thêm bản sao của bạn vào danh sách hoàn tác, cho phép làm lại cũng như
Ấn tượng đầu tiên của tôi là ref
s có thể là công cụ chính xác vì bạn sẽ có thể khôi phục tất cả theo cách phối hợp , trừ khi tất nhiên bạn có thể giảm bớt các chương trình của bạn xuống một danh tính duy nhất (theo ý nghĩa của từ Clojure) thì bạn sẽ không cần cập nhật phối hợp và một tác nhân sẽ làm việc.
Nguồn
2012-03-23 22:34:40
Câu hỏi trước là liệu bạn có thực sự cần đột biến trạng thái này ngay từ đầu hay không. –
@Alex Taggart: và tất nhiên bạn thực sự không (nhưng tôi lấy nó là quan điểm của bạn;) Tôi đã viết hoàn tác/làm lại chỉ sử dụng các đối tượng bất biến (trong Java). Bạn có thể viết hoàn tác/làm lại bằng cách chỉ lưu (đầu vào của người dùng) và bằng cách tạo lại "trạng thái" bằng cách phát lại các yếu tố đầu vào của bạn đến thời gian mong muốn. Vì vậy, khi bạn muốn hoàn tác từ "t5 đến t4", bạn không "tua lại" từ t5 đến t4, nhưng bạn phát lại các đầu vào từ t0 đến t4 (và bởi vì bạn đang thực hiện theo cách "chức năng", bạn đảm bảo kết thúc với trạng thái chính xác). Hoạt động trong nhiều trường hợp và đơn giản hóa rất nhiều việc thực hiện hoàn tác/làm lại IMHO ... – TacticalCoder