Thứ Sáu, 15 tháng 3, 2013

Prototype

1. Khái niệm

Prototype pattern chỉ định loại object sử dụng để tạo ra một thể hiện (instance) nguyên mẫu và tạo ra những object mới bằng cách copy nguyên mẫu này.

2. Vấn đề thực tế

Trong suốt vòng đời của một đối tượng, có 3 giai đoạn: khởi tạo, thực hiện các logic và cuối cùng là được giải phóng khỏi bộ nhớ. Giả sử chúng ta có một object kiểu A được khởi tạo và thực hiện các logic, sau đó chúng ta muốn lưu lại object A vào bộ nhớ  đồng thời đưa object A tham gia vào một logic khác có thay đổi thuộc tính của object A, khi đó chúng ta lại phải tạo lại một object A nữa để thực hiện được yêu cầu này? Như vậy là chúng ta có 2 object A (đã thực hiện các logic) và tài nguyên về thời gian xử lý để tạo ra 2 object A là gấp đôi thời gian tạo ra 1 object A. Liệu chúng ta có thể tối ưu hơn nữa bài toán này?

Prototype pattern ra đời để giải quyết vấn đề trên.

3. Giải pháp

Khi một object được khởi tạo và đã qua xử lý các logic, nó sẽ bị biến đổi các thuộc tính. Vì thế, để tạo ra một object có cùng hiện trạng đã được biến đổi thuộc tính, chúng ta phải khởi tạo nó và cho nó qua quá trình xử lý các logic giống y hệt như object vừa mới tạo. Khi đó chúng ta sẽ có 2 object giống nhau. Điều này tiềm ẩn những rủi ro nhất định vì khi đó môi trường tạo ra 2 object có thể bị biến đổi, và tài nguyên để tạo ra 2 object cùng 1 trạng thái như vậy là cũng mất khá nhiều so với việc chúng ta có thể dùng cách copy ngay chính object cần khởi tạo thêm 1 bản sao.

Khi copy object, chúng ta sẽ không cần phải quan tâm đến môi trường tạo ra object đó, điều này sẽ giảm bớt những rủi ro tiềm ẩn và tiết kiệm tài nguyên để tạo ra 1 object đã qua xử lý (đặc biệt là qua những xử lý phức tạp)

4. Mô hình




5. Sample code


6. Mối liên quan với các pattern khác

Không có nhận xét nào:

Đăng nhận xét