Pola Kelas Terbang di Jawa

1. Ikhtisar

Pada artikel ini, kita akan melihat pola desain kelas terbang. Pola ini digunakan untuk mengurangi jejak memori. Itu juga dapat meningkatkan kinerja dalam aplikasi yang mahal harganya.

Sederhananya, pola kelas terbang didasarkan pada pabrik yang mendaur ulang objek yang dibuat dengan menyimpannya setelah pembuatan. Setiap kali sebuah objek diminta, pabrik mencari objek tersebut untuk memeriksa apakah itu sudah dibuat. Jika ya, objek yang ada akan dikembalikan - jika tidak, objek baru akan dibuat, disimpan, dan kemudian dikembalikan.

Status objek kelas terbang terdiri dari komponen invarian yang dibagi dengan objek serupa lainnya ( intrinsik ) dan komponen varian yang dapat dimanipulasi oleh kode klien ( ekstrinsik ).

Sangat penting bahwa objek kelas terbang tidak dapat diubah: operasi apa pun di negara bagian tersebut harus dilakukan oleh pabrik.

2. Implementasi

Elemen utama dari polanya adalah:

  • antarmuka yang mendefinisikan operasi yang dapat dilakukan oleh kode klien pada objek kelas terbang
  • satu atau lebih implementasi konkret dari antarmuka kami
  • sebuah pabrik untuk menangani instantiasi objek dan cache

Mari kita lihat bagaimana mengimplementasikan setiap komponen.

2.1. Antarmuka Kendaraan

Untuk memulainya, kami akan membuat antarmuka Kendaraan . Karena antarmuka ini akan menjadi jenis kembalian dari metode pabrik, kami perlu memastikan untuk mengekspos semua metode yang relevan:

public void start(); public void stop(); public Color getColor();

2.2. Kendaraan Beton

Selanjutnya, mari kita jadikan kelas Mobil sebagai Kendaraan beton . Mobil kami akan menerapkan semua metode antarmuka kendaraan. Adapun statusnya, itu akan memiliki mesin dan bidang warna:

private Engine engine; private Color color;

2.3. Pabrik Kendaraan

Last but not least, kami akan membuat VehicleFactory . Membangun kendaraan baru adalah operasi yang sangat mahal sehingga pabrik hanya akan membuat satu kendaraan per warna.

Untuk melakukan itu, kami melacak kendaraan yang dibuat menggunakan peta sebagai cache sederhana:

private static Map vehiclesCache = new HashMap(); public static Vehicle createVehicle(Color color) { Vehicle newVehicle = vehiclesCache.computeIfAbsent(color, newColor -> { Engine newEngine = new Engine(); return new Car(newEngine, newColor); }); return newVehicle; }

Perhatikan bagaimana kode klien hanya dapat mempengaruhi keadaan ekstrinsik objek (warna kendaraan kita) meneruskannya sebagai argumen ke metode createVehicle .

3. Kasus Penggunaan

3.1. Kompresi data

Tujuan dari pola flyweight adalah untuk mengurangi penggunaan memori dengan membagikan data sebanyak mungkin, oleh karena itu, ini merupakan dasar yang baik untuk algoritma kompresi lossless. Dalam hal ini, setiap objek kelas terbang bertindak sebagai penunjuk dengan status ekstrinsiknya menjadi informasi yang bergantung pada konteks.

Contoh klasik penggunaan ini ada di pengolah kata. Di sini, setiap karakter adalah objek kelas terbang yang membagikan data yang diperlukan untuk rendering. Alhasil, hanya posisi karakter di dalam dokumen yang memakan memori tambahan.

3.2. Cache Data

Banyak aplikasi modern menggunakan cache untuk meningkatkan waktu respons. Pola kelas terbang mirip dengan konsep inti cache dan dapat sesuai dengan tujuan ini dengan baik.

Tentu saja, ada beberapa perbedaan utama dalam kompleksitas dan implementasi antara pola ini dan cache tujuan umum.

4. Kesimpulan

Singkatnya, tutorial singkat ini berfokus pada pola desain kelas terbang di Jawa. Kami juga memeriksa beberapa skenario paling umum yang melibatkan pola tersebut.

Semua kode dari contoh tersedia di proyek GitHub.