2009-03-31 36 views
12

Than ôi, Google đã thất bại cho tôi ...Mẫu Proxy tuần tự hóa là gì?

Mẫu Proxy tuần tự hóa là gì và tôi có thể tìm hiểu thêm về cách triển khai và sử dụng nó ở đâu?

Trả lời

19

Có mô tả thú vị trong phần cuối cùng của hiệu ứng của Java Bloch, Ấn bản thứ hai.

Giả sử bạn có lớp học A mà bạn muốn tạo tuần tự. Trước tiên, bạn khai báo nó để triển khai Serializable. Sau đó, bạn sử dụng phương thức tuần tự hóa writeReplace() để trả lại "proxy tuần tự hóa" được gọi là thứ tự sẽ được sắp xếp theo thứ tự của phiên bản A. Phương thức writeReplace() không cần phải công khai. Mặc định serialization trên A không bao giờ được gọi, vì vậy tất cả các API thích hợp của A có thể được duy trì.

Thông thường, proxy được triển khai dưới dạng lớp lồng nhau tĩnh riêng mà chính nó phải triển khai Serializable (hoặc Externalizable để kiểm soát hoàn toàn quy trình đọc/ghi). Vì proxy là riêng tư, các chi tiết thực hiện của nó, chẳng hạn như có một hàm tạo không có arg và có thể thay đổi được, sẽ bị ẩn đi.

Proxy lưu trữ đủ trạng thái của đối tượng ban đầu để viết để nó có thể tái tạo đối tượng trên quá trình deserialization. Khi deserialization, proxy sử dụng phương thức readResolve() để trả về một thể hiện của A. Đối với người độc thân, đây có thể là bản thân singleton.

Tôi đã viết một mục blog chi tiết với các ví dụ, Serializing Immutables and Singletons with a Serialization Proxy.

+0

Tôi đã tự hỏi nếu proxy tuần tự hóa có thể được Externalizable. Cuốn sách chỉ đề cập đến Serializable. Cảm ơn! –

Các vấn đề liên quan