Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prototype Pattern #7

Open
tuananhhedspibk opened this issue Feb 6, 2022 · 0 comments
Open

Prototype Pattern #7

tuananhhedspibk opened this issue Feb 6, 2022 · 0 comments

Comments

@tuananhhedspibk
Copy link
Owner

tuananhhedspibk commented Feb 6, 2022

creational pattern cho phép ta có thể copy object mà không cần phải phụ thuộc vào class của nó.

Vấn đề

Bạn muốn copy một object, điều đầu tiên cần làm đó là tạo một instance mới của class, sau đò duyệt qua toàn bộ các giá trị của các fields thuộc về object hiện có và gán giá trị đó cho object mới tạo. Cách làm này không sai nhưng không thể áp dụng khi object có những private fields.

Ngoài ra còn có một vấn đề khác đó là bạn cần phải biết class tương ứng với object vừa tạo, điều này khiến code của bạn sẽ phụ thuộc vào một class. Hơn nữa có thể bạn chỉ biết mỗi interface của object chứ không biết được class cụ thể của nó.

Giải pháp

Prototype Pattern sẽ uỷ thác việc clone object cho chính object được clone. Cụ thể là bạn có thể định nghĩa một interface chung cho các object mà bạn muốn clone. Đơn giản chỉ là định nghĩa interface với method clone.

Việc triển khai clone method là hoàn toàn giống nhau ở các class. Cụ thể là tạo một object mới, sao lưu toàn bộ giá trị của các fields vào object mới. Bản thân mọi ngôn ngữ lập trình cũng cho phép các object có thể truy cập đến các private field của object khác nên ta hoàn toàn có thể sao lưu các giá trị private một cách dễ dàng.

Một object hỗ trợ cloning sẽ được gọi là prototype.

Khi object của bạn có nhiều fields cũng như các config khác thì việc clone chúng có thể được triển khai ở subclass.

Implementation

Screen Shot 2022-02-27 at 12 31 18

(1) Định nghĩa Prototype interface với clone method
(2) ConcretePrototype class sẽ implement Prototype interface, ngoài việc copy object gốc, clone method có thể có các xử lí khác nếu object cần clone là nested object.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant