Apa Pola Desain Kelas Terbang itu?

Flyweight adalah objek bersama yang dapat digunakan dalam berbagai konteks secara bersamaan.

Pola Desain Kelas Terbang digunakan ketika ada kebutuhan untuk membuat objek dalam jumlah besar yang sifatnya hampir serupa. Objek dalam jumlah besar menghabiskan memori dalam jumlah besar dan pola desain Flyweight memberikan solusi untuk mengurangi beban memori dengan berbagi objek.

Diagram Kelas Pola Desain Kelas Terbang:

Seperti yang ditunjukkan dalam diagram sebelumnya, Ada tiga komponen yang terlibat dalam Pola Desain Kelas Terbang:

1-Kelas Terbang:

Merupakan antarmuka yang mendefinisikan anggota objek kelas terbang, antarmuka ini memungkinkan berbagi, namun tidak menerapkannya.

2-ConcreteFlyweight (bersama atau tidak dibagi):

a-SharedConcreteFlyweight:
kelas yang mengimplementasikan antarmuka Flyweight dan menambahkan penyimpanan untuk status intrinsik, jika ada dan harus dapat dibagikan.
b-UnsharedConcreteFlyweight:
kelas juga mengimplementasikan antarmuka Flyweight dan menambahkan penyimpanan untuk instance tertentu dan tidak dibagikan.

3-Facory Kelas Terbang:

memiliki metodeGetFlyweight. metode ini akan memeriksa, apakah objek flyweight ada di cache atau tidak. Jika ada maka ia akan mengembalikan objek kelas terbang yang ada tersebut. Dan jika tidak ada, maka ia akan membuat objek kelas terbang baru dan menambahkan objek tersebut ke dalam cache dan mengembalikan objek kelas terbang tersebut.

Berbagai Negara Bagian dalam Pola Desain Kelas Terbang:

Negara bagian intrinsik:

adalah hal-hal yang konstan dan disimpan dalam memori.

Keadaan Ekstrinsik:

adalah hal-hal yang bukan konstan dan perlu dihitung dengan cepat
dan oleh karena itu tidak disimpan dalam memori.

Objek klien bertanggung jawab untuk meneruskan keadaan ekstrinsik ke kelas terbang saat dibutuhkan.

Memahami Pola Desain Kelas Terbang dengan Contoh:

Misalkan kita harus membuat 30000objek lingkaran dengan warna merah,30000 objek lingkaran denganwarna abu-abu, dan 50000 Objek segitiga dengan warna kuning.

Tanpa Menggunakan Kelas Terbang

kita akan membuat objek lingkaran atau segitiga baru setiap kali kita membutuhkan salah satunya dan mengisinya dengan warna yang dibutuhkan yang berarti 30000 objek lingkaran dengan warna merah dan 30000 objek lingkaran dengan warna abu-abuwarna dan 50000 objek segitiga dengan warna kuning dan ini pasti akan menghabiskan banyak memori.

Menggunakan Kelas Terbang

kita akan membuat dan menyimpan satu objek lingkaran dan satu objek segitiga tanpa warna di Cache. dan ketika kita perlu membuat lingkaran atau segitiga kita bisa mendapatkan objeknya dari cache lalu dengan menggunakan objek ini kita akan memberikan warna yang kita inginkan yang artinya kita hanya perlu 1 objek lingkaran untuk menggambar (30000 objek lingkaran dengan warna merah dan30000 objek lingkaran dengan warna abu-abu ) dan 1 objek segitiga untuk menenggelamkan 50000 objek segitiga dengan warna kuning.

Dalam contoh kita, lingkaran dan segitiga akan mewakili SharedConcreteFlyweight dan Rectangle akan mewakili UnsharedConcreteFlyweight.

Diagram berikut mengilustrasikan solusi Menggunakan Flyweight:

Diagram kelas untuk contoh kita:

Negara-negara intrinsik dan Negara-negara Ekstrinsik dalam contoh kita:

Dalam contoh kita, bentuk lingkaran dan segitiga adalah konstan (tidak berubah). Artinya, apakah warnanya diubah, bentuk lingkaran atau segitiganya akan tetap sama. Jadi, disimpan di memori (cache). Dan karena disimpan dalam memori dan bersifat konstan, maka ia termasuk dalam keadaan intrinsik.

tapi warnanya tidak konstan dan dihitung dengan cepat. oleh karena itu tidak disimpan dalam memori (cache). Hasilnya, warna tersebut termasuk dalam keadaan ekstrinsik.

Penerapan:

Kapan menggunakan Pola Desain Kelas Terbang?

Kita perlu menggunakan Pola Desain Kelas Terbang ketika
1-Banyak objek serupa digunakan dan biaya penyimpanannya tinggi.
2-Mayoritas data status setiap objek dapat dibuat ekstrinsik.
3 -Beberapa objek yang dibagikan akan dengan mudah menggantikan banyak objek yang tidak dibagikan.

Tautan kode lengkap di Github:

StructuralDesignPatterns/7-FlyweightDP

Repo Pola Desain Lengkap Di Github

Di repo ini, Anda akan menemukan semua ringkasan pola desain yang saya buat serta referensi yang saya andalkan

https://github.com/MohamedHashish42/Design_Patterns