Dalam buku Dr. Yan Hong "Java and Mode", itu dimulai dengan deskripsi mode kelas terbang:
Kelas terbang mengacu pada tingkat berat yang paling ringan, yaitu, "kelas terbang" atau "tingkat hujan". Terjemahan "Mode Xienyuan" dipilih di sini karena ini dapat lebih mencerminkan niat mode. Pola ensiklopedia adalah pola struktural suatu objek. Mode ensiklopedia secara efisien mendukung sejumlah besar objek berbutir halus dengan cara yang dibagikan.
Jenis string di java
Dalam bahasa Java, tipe string menggunakan mode ensiklopedia. Objek string adalah tipe akhir dan tidak dapat diubah setelah dibuat. Di Java, konstanta string hadir di kolam konstan. Java akan memastikan bahwa konstanta string hanya memiliki satu salinan di kumpulan konstan. String A = "ABC", di mana "ABC" adalah konstanta string.
tes kelas publik {public static void main (string [] args) {string a = "abc"; String b = "ABC"; System.out.println (a == b); }}Hasil dalam contoh di atas adalah benar, yang berarti bahwa baik A dan B merujuk ke string yang sama konstan "ABC" di kumpulan konstan. Desain seperti itu menghindari sejumlah besar konsumsi sumber daya yang dihasilkan saat membuat objek n atau lebih identik.
Struktur model kenikmatan
Model menikmati mengadopsi berbagi untuk menghindari overhead memiliki objek konten yang sama. Hal yang paling umum dan intuitif tentang overhead ini adalah kehilangan ingatan. Kunci untuk berbagi objek ensiklopedia adalah untuk membedakan antara keadaan internal dan keadaan eksternal .
Keadaan intrinsik disimpan di dalam objek Xiangyuan dan tidak akan bervariasi dengan lingkungan. Oleh karena itu, elemen pengorbanan dapat memiliki keadaan intrinsik dan dapat dibagikan.
Keadaan eksternal berubah dengan perubahan lingkungan dan tidak dapat dibagikan. Keadaan eksternal objek Xiangyuan harus disimpan oleh klien, dan setelah objek Xiangyuan dibuat, itu diteruskan ke objek Xiangyuan ketika perlu digunakan. Keadaan eksternal tidak dapat mempengaruhi keadaan internal objek hidup, mereka tidak tergantung satu sama lain.
Mode Nikmati Yuan dapat dibagi menjadi dua bentuk: Mode Nikmati Yuan dan Komposit Nikmati Mode Yuan.
Mode kenikmatan sederhana
Dalam Mode Pemetikan Sederhana, semua objek yang masih ada dapat dibagikan.
Peran yang terlibat dalam mode kenikmatan sederhana adalah sebagai berikut:
Abstrak Peran kelas terbang: memberikan antarmuka abstrak untuk menentukan metode bahwa semua peran kelas terbang tertentu perlu diimplementasikan.
Peran kelas konkreteFly: mengimplementasikan antarmuka yang ditentukan oleh peran abstrak Xiangyuan. Jika ada keadaan intrinsik, Anda harus bertanggung jawab untuk menyediakan ruang penyimpanan untuk keadaan intrinsik.
Peran Fly WeightFactory: Peran ini bertanggung jawab untuk menciptakan dan mengelola peran Xiangyuan. Peran ini harus memastikan bahwa objek kenikmatan dapat dibagikan dengan benar oleh sistem. Ketika objek klien memanggil objek Xiangyuan, peran pabrik Xiangyuan akan memeriksa apakah sudah ada objek Xiangyuan yang memenuhi persyaratan dalam sistem. Jika sudah ada, peran pabrik Xiangyuan harus memberikan objek Xiangyuan yang ada; Jika tidak ada objek Xiangyuan yang sesuai dalam sistem, peran pabrik Xiangyuan harus membuat objek Xiangyuan yang sesuai.
Kode Sumber
Kelas karakter abstrak
Public Interface Flyweight {// Metode skematis, keadaan parameter adalah operasi public void state eksternal (status string);}Kelas karakter ensiklopedia spesifik kelas konkretefly memiliki keadaan intrinsik. Dalam contoh ini, properti intrinsik dari jenis karakter mewakili, dan nilainya harus ditetapkan ketika objek ensiklopedia dibuat. Semua keadaan intrinsik tidak akan berubah setelah objek dibuat.
Jika objek pengorbanan memiliki keadaan eksternal, semua keadaan eksternal harus disimpan pada klien. Saat menggunakan objek pengorbanan, objek pengorbanan akan diteruskan ke objek pengorbanan oleh klien. Hanya ada satu keadaan eksternal di sini, dan keadaan parameter metode operasi () adalah keadaan eksternal yang ditularkan dari luar.
kelas public kelas Concretefly mengimplementasikan kelas terbang {private character intrinssicstate = null; / *** Konstruktor, keadaan intrinsik dilewatkan sebagai parameter* @param state*/ public concreteflyweight (status karakter) {this.intrinssicState = state; } /** * Keadaan eksternal dilewatkan sebagai parameter ke dalam metode, mengubah perilaku metode, * tetapi tidak mengubah keadaan intrinsik objek. */ @Override public void Operation (status string) {// TODO Metode yang dihasilkan otomatis Stub System.out.println ("State Intrinsik =" + this.intrinssicState); System.out.println ("status ekstrinsik =" + status); }}Untuk kelas peran pabrik Xiangyuan, harus ditunjukkan bahwa klien tidak dapat secara langsung membuat kelas Xiangyuan spesifik, tetapi harus menggunakan metode pabrik () untuk mendapatkan objek Xiangyuan. Secara umum, hanya ada satu objek pabrik Xiangyuan di seluruh sistem, sehingga mode singleton juga dapat digunakan.
Ketika klien membutuhkan objek kenikmatan sederhana, ia perlu memanggil metode pabrik () dari Pabrik Nikmati dan lulus dalam keadaan internal yang diperlukan dari Factory, dan metode pabrik menghasilkan objek menikmati yang diperlukan.
Public Class FlyWeightFactory {Private Map <Character, Flyweight> Files = HashMap baru <karakter, Flyweight> (); Public Flyweight Factory (status karakter) {// Pertama cari objek dari Cache Flyweight Fly = File.get (state); if (fly == null) {// Jika objek tidak ada, buat objek flyweight baru fly = bobot concretefly baru (state); // tambahkan objek kelas terbang baru ini ke cache file.put (state, fly); } return fly; }}Kelas klien
klien kelas publik {public static void main (string [] args) {// TODO Metode yang dihasilkan secara otomatis Stub flyweightFactory factory = new FlyweightFactory (); Flyweight fly = factory. factory (karakter baru ('a')); fly.Opererasi ("panggilan pertama"); fly = factory. factory (karakter baru ('b')); fly.Operation ("Panggilan Kedua"); fly = factory. factory (karakter baru ('a')); fly.Operation ("Panggilan Ketiga"); }}Meskipun klien mengajukan tiga objek pengorbanan, hanya ada dua objek pengorbanan yang benar -benar dibuat, yang merupakan apa artinya berbagi. Hasil operasi adalah sebagai berikut:
Mode kenikmatan yang kompleks
Dalam mode kenikmatan sederhana, semua objek kenikmatan adalah objek kenikmatan sederhana, yang berarti bahwa mereka dapat dibagikan secara langsung. Ada juga situasi yang lebih rumit di mana beberapa mode sintesis penggunaan ekstrinsik sederhana digabungkan untuk membentuk objek ekstrinsik komposit. Objek meta-anjoy gabungan seperti itu tidak dapat dibagikan sendiri, tetapi mereka dapat dipecah menjadi objek meta-nikmati sederhana, dan yang terakhir dapat dibagikan.
Karakter yang terlibat dalam karakter xiangyuan senyawa adalah sebagai berikut:
Abstrak Peran kelas terbang: memberikan antarmuka abstrak untuk menentukan metode bahwa semua peran kelas terbang tertentu perlu diimplementasikan.
Peran kelas konkreteFly: mengimplementasikan antarmuka yang ditentukan oleh peran abstrak Xiangyuan. Jika ada keadaan intrinsik, Anda harus bertanggung jawab untuk menyediakan ruang penyimpanan untuk keadaan intrinsik.
Peran CompositECompositeflyweight: Objek yang diwakili oleh saham majemuk tidak dapat dibagikan, tetapi objek saham komposit dapat didekomposisi menjadi beberapa kombinasi objek yang hanya berbagi objek. Peran ekstrinsik senyawa juga disebut objek ekstrinsik yang tidak dibagi.
Peran Fly WeightFactory: Peran ini bertanggung jawab untuk menciptakan dan mengelola peran Xiangyuan. Peran ini harus memastikan bahwa objek kenikmatan dapat dibagikan dengan benar oleh sistem. Ketika objek klien memanggil objek Xiangyuan, peran pabrik Xiangyuan akan memeriksa apakah sudah ada objek Xiangyuan yang memenuhi persyaratan dalam sistem. Jika sudah ada, peran pabrik Xiangyuan harus memberikan objek Xiangyuan yang ada; Jika tidak ada objek Xiangyuan yang sesuai dalam sistem, peran pabrik Xiangyuan harus membuat objek Xiangyuan yang sesuai.
Kode Sumber
Kelas karakter abstrak
Public Interface Flyweight {// Metode skematis, keadaan parameter adalah operasi public void state eksternal (status string);} Kelas Peran Nikmati Khusus
kelas public kelas Concretefly mengimplementasikan kelas terbang {private character intrinssicstate = null; / *** Konstruktor, keadaan intrinsik dilewatkan sebagai parameter* @param state*/ public concreteflyweight (status karakter) {this.intrinssicState = state; } /** * Keadaan eksternal dilewatkan sebagai parameter ke dalam metode, mengubah perilaku metode, * tetapi tidak mengubah keadaan intrinsik objek. */ @Override public void Operation (status string) {// TODO Metode yang dihasilkan otomatis Stub System.out.println ("State Intrinsik =" + this.intrinssicState); System.out.println ("status ekstrinsik =" + status); }}Objek ekstrinsik komposit terdiri dari objek ekstrinsik murni melalui peracikan, sehingga memberikan metode manajemen agregasi seperti add (). Karena objek meta komposit memiliki elemen agregat yang berbeda, elemen agregat ini ditambahkan setelah objek meta komposit dibuat, ini sendiri berarti bahwa keadaan objek meta komposit akan berubah, sehingga objek meta komposit tidak dapat dibagikan.
Peran ekstrinsik senyawa mengimplementasikan antarmuka yang ditentukan oleh peran ekstrinsik abstrak, yaitu metode operasi (). Metode ini memiliki parameter yang mewakili keadaan eksternal dari objek ekstrinsik komposit. Keadaan eksternal dari semua elemen objek kenikmatan komposit sama dengan keadaan eksternal dari objek kenikmatan komposit; Sementara keadaan internal dari objek kenikmatan sederhana yang terkandung dalam objek kenikmatan gabungan umumnya tidak sama, jika tidak, tidak akan ada nilai penggunaan.
kelas publik concreteCompositeflyweight mengimplementasikan kelas terbang {peta privat <karakter, flyweight> file = new HashMap <karakter, flyweight> (); / *** Tambahkan objek hemat meta sederhana baru ke cluster*/ public void add (tombol karakter, flyweight fly) {file.put (key, fly); } / *** Keadaan eksternal diteruskan ke dalam metode ini sebagai parameter* / @Override Operasi public void (keadaan string) {flyweight fly = null; untuk (objek o: file.keyset ()) {fly = file.get (o); fly.Operation (State); }}} Peran pabrik Xiangyuan menyediakan dua metode yang berbeda, satu untuk menyediakan objek Xiangyuan sederhana dan yang lainnya untuk menyediakan objek Xiangyuan gabungan.
Public Class FlyWeightFactory {Private Map <Character, Flyweight> Files = HashMap baru <karakter, Flyweight> (); / *** Metode pabrik Xiangyuan Compound*/ Public Flyweight Factory (Daftar <CHARCTER> COMPOSITESTATE) {CONCreteCompositEFLY WeightEFLY = CONCRTECompositEFLYWeight baru (); untuk (status karakter: compositesTate) {compositefly.add (state, this.factory (state)); } return compositefly; } /*** Metode pabrik ensiklopedia sederhana* /Public Flyweight Factory (status karakter) {// Pertama cari objek dari Cache Flyweight Fly = File.get (state); if (fly == null) {// Jika objek tidak ada, buat objek flyweight baru fly = bobot concretefly baru (state); // tambahkan objek kelas terbang baru ini ke cache file.put (state, fly); } return fly; }} Peran klien
klien kelas publik {public static void main (string [] args) {list <karakter> compositestate = new arraylist <chorate> (); compositestate.add ('a'); compositestate.add ('b'); compositestate.add ('c'); compositestate.add ('a'); compositestate.add ('b'); Flyweightfactory flyfactory = flyweightfactory baru (); Fly weightEfly1 = flyfactory.factory (compositeState); Flyweight compositefly2 = flyfactory.factory (compositestate); compositefly1.Opererasi ("Panggilan Komposit"); System.out.println ("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ flyfactory.factory (state);Hasil operasi adalah sebagai berikut:
Dari hasil operasi, dapat dilihat bahwa keadaan eksternal dari semua elemen objek kenikmatan komposit sama dengan keadaan eksternal dari objek kenikmatan komposit. Artinya, keadaan keberuntungan eksternal sama dengan panggilan gabungan.
Dari hasil operasi, dapat dilihat bahwa keadaan konotasi dari objek yang masih ada sederhana yang terkandung dalam objek komposit yang masih ada umumnya tidak setara. Artinya, keadaan internal adalah B, C, dan a.
Dari hasil yang berjalan, dapat dilihat bahwa objek saham komposit tidak dapat dibagikan. Artinya, objek yang dibuat dengan menggunakan objek yang sama compositestate melalui pabrik dua kali bukanlah objek yang sama.
Dari hasil operasi, dapat dilihat bahwa hanya menikmati elemen dapat dibagikan. Artinya, objek yang dibuat melalui pabrik dua kali menggunakan keadaan objek yang sama adalah objek yang sama.
Pro dan kontra dari model Xiangyuan
Keuntungan dari mode ensiklopedia adalah sangat mengurangi jumlah objek dalam memori. Namun, harga yang dibayar untuk melakukan ini juga sangat tinggi:
Mode ensiklopedia membuat sistem lebih kompleks. Agar objek dibagikan, beberapa negara perlu dieksternalisasi, yang memperumit logika program.
Mode menikmati mengeksternalisasi keadaan objek menikmati, sambil membaca keadaan eksternal membuat waktu berjalan sedikit lebih lama.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.