Tujuan penggunaan pola bobot terbang adalah untuk menghindari inisialisasi objek yang tidak perlu dan dengan demikian menghemat ruang. Seperti yang didefinisikan oleh GOF , sebuah objek dapat memiliki dua status, kondisi intrinsik dan ekstrinsik:
- Keadaan intrinsik: Disimpan dalam kelas terbang; itu terdiri dari informasi yang independen pada konteks kelas terbang, sehingga membuatnya dapat dibagikan.
- Keadaan ekstrinsik: tergantung dan bervariasi dengan konteks kelas terbang dan karenanya tidak dapat dibagikan. Objek klien bertanggung jawab untuk melewati status ekstrinsik ke kelas terbang ketika dibutuhkan.
Dengan asumsi bahwa kami ingin mengembangkan aplikasi editor teks sederhana di mana setiap kolom berisi semua baris teks dan baris dapat berisi karakter.
Dilema di sini adalah bagaimana merancang kelas Karakter. Di char cdalam kelas Karakter harus menjadi objek (keadaan intrinsik) utama. Namun, char dapat memiliki Font dan Ukuran (keadaan ekstrinsik); jadi kita perlu menyimpan status ekstrinsiknya di Row (klien) dan mengaksesnya saat diperlukan. Untuk tujuan ini, dua daftar yang menyimpan Font dan Ukuran dibuat.
Dengan mengikuti pola Flyweight, Karakter sekarang dapat digunakan kembali dan objek direferensikan dari daftar objek tertentu (pool kelas terbang) yang berisi semua simbol ASCII ( Characterobjek).
Inilah yang saya jelaskan secara visual:

Untuk mencetak 'halo', hanya 4 Characterobjek yang diperlukan, alih-alih 5. Setelah font diubah, tidak ada objek baru yang diperlukan; perhatikan bahwa ini tidak akan mungkin terjadi jika kami menyimpan keadaan ekstrinsik pada kelas Karakter, misalnya,
class Character
{
char c;
int Size;
Font font;
....
}
Menerapkan pola ini pada dataset besar akan mengarah pada optimalisasi yang signifikan pada kompleksitas memori aplikasi dan penggunaan kembali objek.