Latest web development tutorials

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.

pola kelas terbang diagram UML

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