Artikel ini menjelaskan implementasi fungsi game catur Gozi berdasarkan mode Xiangyuan Java. Bagikan untuk referensi Anda, sebagai berikut:
1. Definisi Pola
Nikmati mode dunia secara efisien mendukung sejumlah besar objek berbutir halus dengan cara yang dibagikan. Kurangi konsumsi kinerja sistem yang menciptakan instance objek dengan multiplexing objek yang ada dalam memori. Bahasa Inggris Xiangyuan adalah kelas terbang, yang berarti objek yang sangat kecil, yaitu objek berbutir halus.
2. Contoh model
1. Analisis Pola
Kami meminjam game Gozi untuk menggambarkan pola ini.
2. Diagram kelas statis menikmati mode yuan
3. Contoh Kode
3.1 Membuat Catur Abstrak
Paket com.demo.flyweight.Object; kelas abstrak publik AbstractChessman {// CHesspaper Koordinat Int X yang Dilindungi; int y yang dilindungi; // Kategori Catur (Hitam | Putih) Catur string yang dilindungi; public abstractChessman (string catur) {this.chess = catur; } // point koordinat mengatur titik void abstrak publik (int x, int y); // Tampilkan informasi catur public void show () {System.out.println (this.chess + "(" + this.x + "," + this.y + ")"); }}3.2 Membuat Blackchessman
Paket com.demo.flyweight.Object; kelas publik Blackchessman memperluas abstrak abstrak { / ** * konstruktor menginisialisasi catur hitam * / blackchessman publik () {super ("●"); System.out.println ("-Blackchessman Construction Exec !!!"); } // point koordinat pengaturan @Override public void point (int x, int y) {this.x = x; this.y = y; // tunjukkan konten catur show (); }}3.3 Buat Whitechessman
Paket com.demo.flyweight.object; kelas publik Whitechessman memperluas abstrak abstrak { / ** * konstruktor menginisialisasi catur putih * / public whitechessman () {super ("○"); System.out.println ("-EXEC KONSTRUKSI WHITECHESSMAN !!!"); } // point koordinat pengaturan @Override public void point (int x, int y) {this.x = x; this.y = y; // Tampilkan Catur Piece Content Show (); }}3.4 Buat pabrik catur pria
Paket com.demo.flyweight.factory; import java.util.hashtable; impor com.demo.flyweight.object.abstractchessman; import com.demo.flyweight.object.blackchessman; impor com.demo.flyweight.object.whitechessman; kelas publik fives fivescye.flyweight.object.whitechessman; kelas publik fives fivescye.flyweight FivechessManFactory FivechesSmanFactory = New FivechessManFactory (); // cache untuk menyimpan objek bersama private final hashtable <karakter, abstractchessman> cache = hashtable baru <karakter, abstractchessman> (); // Privatisasi Konstruktor Private FivechessManFactory () {} // Dapatkan Pabrik Singleton Public Static FivechessManFactory getInstance () {return fivechessManFactory; } / ** * Dapatkan potongan catur berdasarkan karakter * * @param c * (b: catur hitam: catur putih) * @return * / public abstractChessman getchessManObject (char c) {// dapatkan contoh objek gadai dari cache abstractchessmanChessman = this.cache.get (c); if (abstractChessman == null) {// Jika tidak ada informasi instance objek pion di cache, buat instance objek pion dan letakkan di sakelar cache (c) {case 'b': abstractChessman = new blackchessman (); merusak; case 'w': abstractchessman = new Whitechessman (); merusak; default: break; } // untuk mencegah karakter ilegal memasuki null if (abstractchessman! = Null) {// letakkan this.cache.put (c, abstractchessman); }} // Jika ada objek catur di cache, kembalikan langsung AbstractChessman; }}3.5 Implementasi Klien
Paket com.demo; import java.util.random; import com.demo.flyweight.factory.fivechesSmanFactory; import com.demo.flyweight.object.abstractChessman;/** aplikasi utama * @Author */klien kelas publik {/** * @param {public state/public/@Author */public client {/** @param * Factory FivechesSManFactory FivechesSManFactory = FivechesSmanFactory .getInstance (); Acak acak = acak baru (); int radom = 0; AbstractChessman AbstractChessman = NULL; // Dapatkan bagian catur untuk (int i = 0; i <10; i ++) {radom = random.nextInt (2); switch (radom) {// Dapatkan cangkang catur hitam 0: abstractChessman = fivechessManFactory.getChessManObject ('b'); merusak; // Dapatkan Kasus Catur Putih 1: AbstractChessman = FivechessManFactory.GetChessManObject ('W'); merusak; } if (AbstractChessman! = null) {AbstractChessman.Point (i, random.nextInt (15)); }}}}4. Hasil Operasi
--Hitechessman Construction Exec !!!
○ (0,2)
○ (1,6)
--BlackChessman Construction Exec !!!
● (2,3)
○ (3,14)
○ (4,13)
○ (5,8)
● (6,14)
● (7,0)
● (8,3)
○ (9,8)
3. Dua negara dari mode kenikmatan
Status intrinsik : Ini tidak akan berubah dengan perubahan lingkungan, itu disimpan dalam informasi keadaan internal dari objek entrinsik. Keadaan intrinsik ini dapat dibagikan. Untuk objek entrinsik apa pun, nilainya persis sama. Sama seperti "potongan hitam" dan "potongan putih" di Goji, keadaan yang diwakilinya adalah keadaan internal.
Keadaan Eksternal : Ini akan berubah dengan perubahan lingkungan, sehingga tidak dapat berbagi negara. Untuk objek genus yang berbeda, nilainya mungkin berbeda. Keadaan eksternal objek Xiangyuan harus disimpan oleh klien. Setelah objek Xiangyuan dibuat dan perlu digunakan, itu akan diteruskan ke objek Xiangyuan. Sama seperti informasi posisi Gozi, negara yang diwakili adalah keadaan eksternal dari objek ekologi.
Oleh karena itu, keadaan eksternal dan internal Xiangyuan adalah dua negara independen dan tidak memiliki hubungan satu sama lain.
Iv. Prinsip -prinsip desain model ini
1. Bagikan objek berbutir halus untuk mengurangi ruang memori.
2. Secara efektif mengisolasi bagian yang berubah dan bagian sistem yang tidak berubah.
5. Gunakan kesempatan
1. Ketika ada banyak contoh jenis objek tertentu dalam sistem.
2. Dalam desain sistem, setelah mengklasifikasikan contoh objek, sekarang saatnya untuk menemukan bahwa ada beberapa kategori nyata yang berbeda.
6. Diagram Kelas Statis Nikmati Mode Yuan
Untuk informasi lebih lanjut tentang algoritma java, pembaca yang tertarik dengan situs ini dapat melihat topik: "struktur data java dan tutorial algoritma", "ringkasan tips node dom java", "ringkasan file operasi java dan direktori" dan "ringkasan tip operasi java cache" tips java "tips java" Tips "Java Cache Tips"
Saya harap artikel ini akan membantu pemrograman Java semua orang.