Mode kelas terbang: Melalui teknologi berbagi, ia dapat secara efektif mendukung sejumlah besar objek berbutir halus.
Mode Nikmati Yuan dibagi menjadi sederhana menikmati mode yuan dan komposit menikmati mode yuan di "java and mode" yan hong. Komposit menikmati yuan dalam mode komposit tidak dapat dibagikan. Kunci untuk berbagi objek menikmati yuan adalah untuk membedakan antara keadaan internal dan eksternal. Dua "kongruen" ini terlalu sulit untuk dipahami. Saya tidak mengatakan bahwa terjemahannya tidak baik, tetapi mungkin kemampuan pemahaman saya buruk, atau versi terjemahan dari "elemen pola desain dari perangkat lunak berorientasi objek yang dapat digunakan kembali" diterjemahkan ke dalam objek internal dan eksternal. Ini relatif mudah dan terasa canggung pada aroma sastra dari hal -hal konseptual yang terlalu kuat. Karakter di sini juga menggunakan pernyataan "Dasar-dasar pola desain yang dapat digunakan kembali, perangkat lunak berorientasi objek", yang tidak membedakan antara mode sederhana dan mode komposit, tetapi memiliki kelas tidak dibawa (dalam "java dan mode", ini menunjukkan bahwa kenikmatan komposit tidak dapat dibagikan). Kami di sini mengatakan bahwa itu tidak dapat berbagi peran kenikmatan. Dengan cara ini, karakter dalam mode kenikmatan meliputi:
Diagram kelembagaan kelas model Xiangyuan adalah sebagai berikut:
Saat menggunakan pola ensiklopedia dalam desain java.lang.string, kita tahu bahwa string di java selalu dibagikan, seperti cuplikan kode berikut:
String m = "a"; string n = "a"; System.out.println (m == n);
Ini akan menghasilkan benar, menunjukkan bahwa m dan n menunjuk ke contoh yang sama, dan hanya ada satu "a" dalam memori. Beginilah cara Mode Nikmati Yuan digunakan pada string.
Penggunaan mode Xiangyuan dalam proses pengeditan dan penyimpanan teks. Di sini, diasumsikan bahwa artikel tersebut terdiri dari objek garis dan objek garis terdiri dari beberapa objek karakter. Namun, jika setiap karakter menyimpan objeknya sendiri, maka postingan memiliki ribuan objek karakter, yang secara serius mengkonsumsi memori sistem dan menyebabkan overhead runtime yang tidak dapat diterima. Metode yang baik adalah menggunakan mode Xiangyuan untuk hanya menghemat nilai pengkodean karakter ASCII, sebagai keadaan internal yang tidak berubah, berbagi objek karakter, dan data yang diformat seperti warna dan ukuran karakter relatif dipertahankan oleh klien, dan dapat dilewatkan dari luar selama runtime. Setiap baris adalah objek universal yang tidak dibagi, yang terdiri dari objek universal (objek karakter).
Mari kita lihat contoh struktur sederhana dari pola ensiklopedia:
/ *** Surat*/ Surat Kelas Publik {Nama String Privat; surat publik (nama string) {this.name = name; } public string getName () {return name; }} / ** * Pabrik Xiangyuan (pabrik singleton) yang menghasilkan objek surat */ Letterfactory kelas publik {peta pribadi <string, letter> peta; instance letterfactory private static = new letterfactory (); private letterfactory () {map = new HashMap <string, letter> (); } public static letterfactory getInstance () {return instance; } public void add (huruf huruf) {if (letter! = null &&! map.containskey (letter.getName ())) {map.put (letter.getName (), letter); } System.out.println ("Map.Size ====" + MAP.Size ()); } surat publik get (nama string) {return map.get (name); }} tes kelas publik {public static void main (string [] args) {letterfactory factory = letterfactory.getInstance (); String word = "kemudahan"; addletterbyname (pabrik, kata); getletter (pabrik, kata); } // Tambahkan Surat Objek Statis Void AddletterByName (pabrik LetterFactory, String Word) {for (char c: word.tochararray ()) {factory.add (huruf baru (c + "")); }} // Output Letter Object static void getletter (letterfactory factory, string word) {for (char c: word.tochararray ()) {system.out.println (factory.get (c + ")); }}}Mencetak:
peta.size ==== 1 peta.size ==== 2 peta.size ==== 2 peta.size ===== 3 peta.size ==== 4 Map.Size ===== 5 peta.Size ===== 5 flyweight.leTter@3343c8b3 [email protected]@3343c8b3 [email protected] [email protected] [email protected]. flyweight.letter@1aa8c488 flyweight.leTter@3dfeca64 flyweight.letter@22998b08 flyweight.letter@1aa8c488