Khác biệt giữa bản sửa đổi của “Memento pattern”

n
Alphama Tool, General fixes
n (add category, replaced: ( → ( (3), ) → ) (2) using AWB)
n (Alphama Tool, General fixes)
 
Nhìn chung, giao diện dùng chung của ConstraintSolver có thể là không đủ để cho phép hiệu quả đảo ngược một cách chính xác của nó lên đối tượng khác. Cợ chế undo phải làm việc thân thiện hơn với ConstraintSolver để thiết lập lại trạng thái trước đó, nhưng chúng ta cũng nên tránh để lộ ra trạng thái trong của ConstraintSolver cho cơ chế undo.
Chúng ta có thể giải quyết vấn đề này với mẫu Memento. Một Memento là một đối tượng lưu trữ ảnh của trạng thái trong của đối tượng khác - là Originator của Memento. Cơ chế undo sẽ yêu cầu một Memento từ Originator khi nó cần kiểm tra trạng thái của Originator. Originator khởi tạo Memento với thông tin mô tả trạng thái hiện tại của nó. Chỉ có Originator mới có thể lưu trữ và lấy thông tin từ Memento- Memento là " đục”đục" đối với các đối tượng khác.
Trong ví dụ về trình soạn thảo đồ hoạ mà chúng ta vừa thảo luận thì ConstraintSolver hành động như một Originator. Sau đây là chuỗi những sự kiện mô tả quá trình undo:
Trình soạn thảo yêu cầu một Memento từ một ConstraintSolver như là một hiệu ứng phụ của thao tác dịch chuyển.
void AddConstraint(
Graphic* startConnection, Graphic* endConnection
);
void RemoveConstraint(
Graphic* startConnection, Graphic* endConnection
);
ConstraintSolverMemento* CreateMemento();