kelas terbang
Kelas terbang (kelas terbang Pola) terutama digunakan untuk mengurangi jumlah objek diciptakan untuk mengurangi penggunaan memori dan meningkatkan kinerja. Jenis pola desain milik model struktural, yang memberikan pengurangan jumlah objek untuk memperbaiki struktur objek secara diperlukan oleh aplikasi.
Kelas terbang mencoba untuk menggunakan kembali objek yang sudah ada yang sama, jika objek yang cocok tidak ditemukan, objek yang baru dibuat. Kami akan menarik 20 lingkaran didistribusikan di lokasi yang berbeda dengan menciptakan lima objek untuk menunjukkan pola ini. Karena hanya lima jenis warna yang tersedia, sehingga atribut warna yang digunakan untuk memeriksa obyekLingkaranyang ada.
pengenalan
Maksud: Gunakan berbagi untuk mendukung sejumlah besar benda halus.
Terutama untuk mengatasi: Dalam sejumlah besar objek, dapat menyebabkan memori overflow, kami mengumpulkan sebagian dimana abstrak, jika Anda memiliki permintaan layanan yang sama langsung kembali benda-benda yang ada di memori, untuk menghindari re-dibuat.
Kapan menggunakan: 1, sistem memiliki sejumlah besar objek.2, benda-benda ini mengkonsumsi banyak memori. 3, keadaan sebagian besar benda-benda ini dapat externalized. 4, banyak benda-benda dapat dibagi menjadi kelompok-kelompok sesuai dengan keadaan intrinsik, ketika objek dihapus dari benda Yun luar, setiap objek dapat diatur menggunakan sebuah objek sebagai gantinya. 5, sistem tidak bergantung pada identitas objek-objek ini, benda-benda ini tidak bisa dibedakan.
Cara memperbaiki: Menganalisis dengan kode identifikasi yang unik, jika ada di memori, kode identifikasi unik dari objek diidentifikasi dikembalikan.
Kunci Kode: HashMap disimpan dengan benda-benda ini.
contoh aplikasi: 1, JAVA di String, jika kembali, jika tidak maka membuat string disimpan dalam string kolam penyangga dalam.2, data database renang.
Keuntungan: secara signifikan mengurangi penciptaan benda-benda, mengurangi memori sistem, sehingga efisiensi yang meningkat.
Kekurangan: peningkatan biaya dari sistem, kita perlu memisahkan internal dan eksternal statusnya negara, dan negara eksternal alam secara inheren tidak harus mengubah dengan keadaan internal perubahan, selain itu akan menciptakan sistem kekacauan.
Penggunaan skenario: 1, sistem memiliki sejumlah besar objek yang sama.2, perlu pool scene.
Catatan: 1, memperhatikan keadaan divisi eksternal dan internal negara, atau dapat menyebabkan masalah benang-keselamatan.2, kelas harus memiliki objek pabrik untuk dikendalikan.
realisasi
Kami akan membuat antarmukaBentukdan pelaksanaan kelas entitas antarmukaLingkaranShape. Langkah berikutnya adalah untuk mendefinisikan kelas pabrikShapeFactory.
ShapeFactorymemilikiLingkaranHashMap, di manalingkaranwarna kunci bernama objek. Setiap kali permintaan diterima, itu akan membuat lingkaran warna tertentu.ShapeFactoryperiksaHashMapdi objek lingkaran, jika ditemukan bendaCircle,objek dikembalikan, jika tidak maka akan membuat disimpan dalam hashmap untuk mempersiapkan untuk penggunaan selanjutnya dari objek baru, dan objek dikembalikan ke klien.
FlyWeightPatternDemo,demo kami untuk mendapatkan kelas untuk menggunakanShapeFactoryobjekShape.Ini akan mengirimkan informasi(merah / hijau / biru / hitam/ putih) untukShapeFactory,perlu untuk mendapatkan warna objek.
Langkah 1
Buat sebuah antarmuka.
Shape.java
antarmuka publik Shape { kekosongan draw (); }
Langkah 2
Membuat kelas entitas yang mengimplementasikan antarmuka.
Circle.java
public class Lingkaran mengimplementasikan Shape { warna String swasta; int swasta x; private int y; radius int swasta; Lingkaran publik (String warna) { this.color = warna; } kekosongan setX publik (int x) { this.x = x; } public void Sety (int y) { this.y = y; } public void setRadius (radius int) { this.radius = radius; } @ Override public void draw () { System.out.println ( "Lingkaran: Menggambar () [Color:" + warna + ", X:" + x + ", y:" + y + ", radius:" + jari-jari); } }
Langkah 3
Buat sebuah pabrik untuk memproduksi kelas objek entitas berdasarkan informasi yang diberikan.
ShapeFactory.java
impor java.util.HashMap; public class ShapeFactory { private static HashMap akhir <String, Shape> circleMap = new HashMap (); public static Bentuk getCircle (String warna) { lingkaran lingkaran = (lingkaran) circleMap.get (warna); jika (lingkaran == null) { lingkaran = baru Circle (warna); circleMap.put (warna, lingkaran); System.out.println ( "Membuat lingkaran warna:" + warna); } kembali lingkaran; } }
Langkah 4
Gunakan pabrik untuk mendapatkan obyek entitas kelas dengan melewati informasi warna.
FlyweightPatternDemo.java
public class FlyweightPatternDemo { static String warna akhir pribadi [] = { "Red", "Hijau", "Blue", "White", "Black"}; public static void main (String [] args) { for (int i = 0; i <20; ++ i) { lingkaran lingkaran = (Circle) ShapeFactory.getCircle (getRandomColor ()); circle.setX (getRandomX ()); circle.setY (getRandomY ()); circle.setRadius (100); circle.draw (); } } String statis pribadi getRandomColor () { kembali warna [(int) (Math.random () * colors.length)]; } private static int getRandomX () { return (int) (Math.random () * 100); } private static int getRandomY () { return (int) (Math.random () * 100); } }
Langkah 5
Verifikasi output.
Menciptakan lingkaran warna: Hitam Lingkaran: Menggambar () [Warna: Hitam, x: 36, y: 71, radius: 100 Menciptakan lingkaran warna: Hijau Lingkaran: Menggambar () [Warna: Hijau, x: 27, y: 27, radius: 100 Menciptakan lingkaran warna: Putih Lingkaran: Menggambar () [Warna: Putih, x: 64, y: 10, radius: 100 Menciptakan lingkaran warna: Merah Lingkaran: Menggambar () [Warna: Merah, x: 15, y: 44, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 19, y: 10, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 94, y: 32, radius: 100 Lingkaran: Menggambar () [Warna: Putih, x: 69, y: 98, radius: 100 Menciptakan lingkaran warna: Biru Lingkaran: Menggambar () [Warna: Biru, x: 13, y: 4, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 21, y: 21, radius: 100 Lingkaran: Menggambar () [Warna: Biru, x: 55, y: 86, radius: 100 Lingkaran: Menggambar () [Warna: Putih, x: 90, y: 70, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 78, y: 3, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 64, y: 89, radius: 100 Lingkaran: Menggambar () [Warna: Biru, x: 3, y: 91, radius: 100 Lingkaran: Menggambar () [Warna: Biru, x: 62, y: 82, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 97, y: 61, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 86, y: 12, radius: 100 Lingkaran: Menggambar () [Warna: Hijau, x: 38, y: 93, radius: 100 Lingkaran: Menggambar () [Warna: Merah, x: 76, y: 82, radius: 100 Lingkaran: Menggambar () [Warna: Biru, x: 95, y: 82, radius: 100