Mục đích của việc sử dụng mô hình cân nặng là để tránh khởi tạo đối tượng không cần thiết và do đó tiết kiệm không gian. Theo định nghĩa của GOF , một đối tượng có thể có hai trạng thái, trạng thái bên trong và trạng thái bên ngoài:
- Trạng thái nội tại: Được lưu trữ trong fly trọng; nó bao gồm các thông tin độc lập trên bối cảnh flyweights, do đó làm cho nó có thể chia sẻ được.
- Trạng thái bên ngoài: phụ thuộc và thay đổi theo bối cảnh của ruồi và do đó không thể chia sẻ. Các đối tượng khách hàng chịu trách nhiệm chuyển trạng thái bên ngoài đến trọng lượng khi cần.
Giả sử rằng chúng tôi muốn phát triển một ứng dụng soạn thảo văn bản đơn giản trong đó mỗi cột chứa tất cả các hàng của văn bản và hàng có thể chứa các ký tự.
Vấn đề nan giải ở đây là làm thế nào để thiết kế lớp Nhân vật. Lớp char cnhân vật bên trong phải là đối tượng chính (trạng thái nội tại). Tuy nhiên, một char có thể có Phông chữ và Kích thước (trạng thái bên ngoài); do đó chúng ta cần lưu trữ trạng thái bên ngoài của nó trên Hàng (máy khách) và truy cập nó khi cần. Với mục đích này, hai danh sách lưu trữ Phông chữ và Kích cỡ được tạo.
Bằng cách làm theo mẫu Flykg, Nhân vật hiện có thể tái sử dụng và các đối tượng đang được tham chiếu từ một danh sách cụ thể của đối tượng (nhóm cân nặng) có chứa tất cả các ký hiệu ( Characterđối tượng) ASCII .
Đây là những gì tôi mô tả trực quan:

Để in 'xin chào', chỉ cần 4 Characterđối tượng, thay vì 5. Một khi phông chữ được thay đổi, không yêu cầu đối tượng mới; lưu ý rằng điều này sẽ không thể xảy ra nếu chúng ta lưu trữ trạng thái bên ngoài trên lớp Nhân vật, ví dụ:
class Character
{
char c;
int Size;
Font font;
....
}
Áp dụng mẫu này trên các bộ dữ liệu lớn sẽ dẫn đến tối ưu hóa đáng kể về độ phức tạp bộ nhớ của ứng dụng và khả năng sử dụng lại đối tượng.