تصف هذه المقالة تنفيذ وظائف لعبة Gozi Chess استنادًا إلى وضع Xiangyuan في Java. شاركه للرجوع إليه ، على النحو التالي:
1. تعريف نمط
استمتع بالوضع العالمي يدعم بكفاءة عددًا كبيرًا من الكائنات ذات الحبيبات الدقيقة بطريقة مشتركة. تقليل استهلاك أداء النظام إنشاء مثيلات الكائن عن طريق تعدد الكائنات الموجودة في الذاكرة. إن إنجليزية Xiangyuan هي وزن الذبابة ، مما يعني كائنًا صغيرًا بشكل خاص ، أي كائنًا دقيقًا.
2. أمثلة على النموذج
1. تحليل النمط
نحن نقترض لعبة Gozi لتوضيح هذا النمط.
2. رسم تخطيطي فئة ثابتة للاستمتاع بوضع يوان
3. مثال رمز
3.1 إنشاء تشيسمان مجردة
package com.demo.flyweight.object ؛ public class class AbstractChessman {// chesspaper coordinates محمية int x ؛ محمية int y ؛ // فئة ورق الشطرنج (أسود | أبيض) شطرنج سلسلة محمية ؛ Public AbstractChessman (سلسلة الشطرنج) {this.chess = chess ؛ }. // show chesspaper information public void show () {system.out.println (this.chess + "(" + this.x + "،" + this.y + ")") ؛ }}3.2 إنشاء Blackchessman
Package com.demo.flyweight.object ؛ الطبقة العامة BlackChessman يمتد AbstractChessman { / ** * يهيئ مُنشئ Black Chessman * / Public Blackchessman () {Super ("●") ؛ System.out.println ("-BlackChessman Construction Exec !!!") ؛ }. this.y = y ؛ // عرض محتويات الشطرنج () ؛ }}3.3 إنشاء Whitechessman
Package com.demo.flyweight.object ؛ الطبقة العامة WhiteChessman يمتد AbstractChessman { / ** * يهيئ مُنشئ White Chessman * / Public Whitechessman () {Super ("○") ؛ System.out.println ("-Whitechessman Construction Exec !!!") ؛ }. this.y = y ؛ // عرض محتويات قطعة الشطرنج () ؛ }}3.4 إنشاء مصنع رجل الشطرنج
حزمة com.demo.flyweight.factory ؛ استيراد java.util.hashtable ؛ استيراد com.demo.flyweight.object.abstractchessman fivechessmanfactory fivechessmanfactory = new fivechessmanfactory () ؛ // ذاكرة التخزين المؤقت لتخزين الكائنات المشتركة hashtable final <faracter ، AbstractChessman> cache = new hashtable <الحرف ، الملخص> () ؛ // Constructor Private FivechessManfactory () {} // Get Singleton Factory public fivechessmanfactory getInstance () {return fivechessmanfactory ؛ } / ** * احصل على قطع الشطرنج على أساس الأحرف * * param c * (b: Black Chessw: White Chess) * @REGRUNT * / public AbstractChessman getChessManObject (char c) {// الحصول على مثيل الكائن البيدق من Cache AbstractChessman = th this.cache.get.get (c) ؛ if (AbstractChessman == NULL) {// إذا لم يكن هناك معلومات مثيل كائن Pawn في ذاكرة التخزين المؤقت ، قم بإنشاء مثيل كائن Pawn ووضعه في مفتاح ذاكرة التخزين المؤقت (C) {case 'b': AbstractChessman = New BlackChessman () ؛ استراحة؛ Case 'W': AbstractChessman = New WhiteChessman () ؛ استراحة؛ الافتراضي: استراحة ؛ } // لمنع الأحرف غير القانونية من إدخال NULL إذا (AbstractChessman! = null) {// put this.cache.put (c ، ussstchessman) ؛ }} // إذا كان هناك كائن شطرنج في ذاكرة التخزين المؤقت ، فأرجع مباشرة actractChessman ؛ }}3.5 تنفيذ العميل
package com.demo ؛ import java.util.random ؛ import com.demo.flyweight.factory.fivechansmanfactory ؛ import com.demo.flyweight.object.abstractman ؛/** * application main * * uthor */public client {/** pparam */public strage [] Goziqi Factory fivechessmanfactory fivechessmanfactory = fivechessmanfactory .getInstance () ؛ عشوائي عشوائي = جديد عشوائي () ؛ int radom = 0 ؛ AbstractChessman AbstractChessman = null ؛ // احصل على قطعة الشطرنج لـ (int i = 0 ؛ i <10 ؛ i ++) {radom = random.nextint (2) ؛ Switch (Radom) {// Get the Black Chess Case 0: AbstractChessman = fivechessmanfactory.getChessManObject ('b') ؛ استراحة؛ // Get the White Chess Case 1: AbstractChessman = fivechessmanfactory.getChessManObject ('W') ؛ استراحة؛ } if (AbstractChessman! = NULL) {AbstractChessman.Point (i ، Random.NextInt (15)) ؛ }}}}4. نتائج التشغيل
-WhiteTechessman 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. حالتان من وضع التمتع
الحالة الجوهرية : لن تتغير مع تغيير البيئة ، يتم تخزينها في معلومات الحالة الداخلية للكائن الجانبي. يمكن مشاركة هذه الحالة الجوهرية. لأي كائن entrinsic ، قيمته هي نفسها بالضبط. تمامًا مثل "القطع السوداء" و "القطع البيضاء" في غوجي ، فإن الحالة التي تمثلها هي الحالة الداخلية.
الحالة الخارجية : ستتغير مع تغيير البيئة ، لذلك لا يمكن مشاركة الحالة. بالنسبة للكائنات المختلفة من جنس ، قد تكون قيمه مختلفة. يجب حفظ الحالة الخارجية للكائن Xiangyuan من قبل العميل. بعد إنشاء كائن Xiangyuan ويحتاج إلى استخدامه ، سيتم تمريره إلى كائن Xiangyuan. تمامًا مثل معلومات الموقف من Gozi ، فإن الدولة الممثلة هي الحالة الخارجية لسيئة البيئة.
لذلك ، فإن الحالات الخارجية والداخلية في Xiangyuan هي دولتين مستقلتين وليس لها صلة مع بعضها البعض.
رابعا. مبادئ تصميم هذا النموذج
1. شارك الكائنات الدقيقة الحبيبية لتقليل مساحة الذاكرة.
2. عزل الأجزاء المتغيرة بشكل فعال والأجزاء التي لم تتغير من النظام.
5. استخدام المناسبات
1. عندما يكون هناك العديد من مثيلات نوع كائن معين في النظام.
2. في تصميم النظام ، بعد تصنيف مثيلات الكائنات ، حان الوقت للعثور على وجود عدد قليل من الفئات المميزة الحقيقية.
6. مخطط فئة ثابتة للاستمتاع بوضع يوان
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.