Flyweight pattern

Flyweight pattern được sử dụng chủ yếu để giảm số lượng object được tạo ra nhằm tiết kiệm bộ nhớ và tăng hiệu suất hoạt động của hệ thống. Pattern này cố gắng tái sử dụng những object đã tạo bằng cách lưu trữ chúng lại và chỉ tạo ra object mới khi không tìm ra được object tương đương số các object đã tạo.
Một flyweight object là một object có thể được dùng trong nhiều context một cách đồng thời và được tách làm 2 phần:
Intrinsic state: Phần các tính chất có thể share được bằng cách tham chiếu tới một object đã được tạo sẵn. Ví dụ: Color
Extrinsic state: Phần các tính chất không share được vì đây là các tính chất riêng đại diện cho sự đa dạng của object. Ví dụ: Size
Class diagram
Flyweight
Khai báo method cho các flyweight object có thể nhận và xử lý extrinsic state.
ConcreteFlyweight
Cài đặt method của flyweight interface và lưu trữ cho các intrinsic state. Một concrete flyweight  phải có thể share được. Mọi trạng thái (property / data/ state) của concrete flyweight object đều phải là intrinsic và độc lập với ngữ cảnh(context) của concrete flyweight object chứa nó.
UnsharedConcreteFlyweight
Không phải toàn bộ các flyweight object đều cần phải share, trong trường hợp vì lý dó nào đó bạn có một số object không muốn share bạn có thể extend Flyweight abstract và dùng riêng. Tuy nhiên trường hợp này khá hiếm gặp.
FlyweightFactory
Tạo và quản lý các flyweigh object
Đảm bảo các flyweight được share chính xác.
Client
Duy trì và sự dụng các flyweight object.
Tính toán và lưu trữ các extrinsic state của object.
Code mẫu

Kết quả thực thi

Mặc dầu Flyweight pattern rất hiệu quả trong việc xử lý các vấn đề về tiết kiệm bộ nhớ và nâng cao performance nhưng lại ít khi được dùng trong thực tế vì khá hiếm gặp các vấn đề tương tự. Tuy nhiên, các bạn nên tham khảo kỹ lưỡng để hiểu pattern này vì tính mở rộng của nó như example trên là một ví dụ cụ thể. Happy coding!

No Comments

Post A Comment