تصف هذه المقالة استخدام وضع المذكرة لتنفيذ وظائف لعبة التمرير في Java. شاركه للرجوع إليه ، على النحو التالي:
1. تعريف نمط
يلتقط وضع المذكرة الحالة الداخلية لكائن ما دون تدمير العلبة ويوفر هذه الحالة خارج الكائن. وبهذه الطريقة ، يمكن استعادة الكائن إلى حالته المحفوظة الأصلية لاحقًا.
2. أمثلة على النموذج
1 تحليل الوضع
استعارنا لعبة المستوى لتوضيح هذا الوضع.
2 وضع المذكرة الرسم التخطيطي فئة ثابتة
3 أمثلة رمز (وضع مذكرة المربع الأسود)
3.1 إنشاء مذكرة ضيقة الواجهة inarrowmemento
Package com.demo.memento ؛/** * واجهة ضيقة المذكرة (لا يتم توفير أي طريقة ، لا يمكن للكائنات الخارجية الوصول إلى المعلومات الداخلية لكائن المذكرة) * * Author * */واجهة عامة InarrowMemento {}3.2 مذكرات الراعي البطل
package com.demo.originator ؛ import java.util.random ؛ import com.demo.memento.inarrowmemento ؛/** * challenger * * author * */public class Hero {// blood value int Blood ؛ // قوة القيمة الخاصة بالسيف ؛ // رقم عشوائي خاص نهائي عشوائي = جديد عشوائي () ؛ // construct method تهيئة Content Public Hero () {this.blood = 100 ؛ this.sword = 100 ؛ } // إنشاء مذكرة لتوفير المحتوى العام inarrowmemento createmento () {system.out.println ("إنشاء مذكرة ...") ؛ إرجاع New Memento (this.blood ، this.sword) ؛ }. if (memento! = null) {memento memento2 = (memento) memento ؛ this.blood = memento2.getBlood () ؛ this.sword = memento2.getsword () ؛ }} / ** * Boss Challenge * / public int koboss () {// عندما تكون قيمة الدم <= 0 ، فشل التحدي. افترض أن احتمال هزيمة الرئيس هو 2 ٪ // عند الحكم ، لا تزال هناك قيمة دم إذا (this.blood <= 0 || this.sword <= 0) {system.out.println (this.toString ()) ؛ System.out.println ("تغيير Boss فشل!") ؛ العودة -1 ؛ } آخر {// الحصول على الرقم العشوائي double win = math.random () ؛ if (win <= 0.02) {system.out.println (this.toString ()) ؛ System.out.println ("تهانينا ، تحدي الرئيس بنجاح!") ؛ العودة 1 ؛ } آخر {system.out.println (this.toString ()) ؛ System.out.println ("استمر في مهاجمة Boss ...") ؛ // الرقم العشوائي يقلل من قيمة الدم وقيمة القوة لمواصلة ko int Blood_sub = random.nextint (10) ؛ int sword_sub = random.nextint (10) ؛ this.blood -= Blood_sub ؛ this.sword -= sword_sub ؛ العودة 0 ؛ }}} Override Public String ToString () {return "قيمة الدم الحالية:" + this.blood + " - قيمة القوة الحالية:" + this.sword ؛ } / ** * مذكرة (الفئة بأكملها خاصة ولا يمكن الوصول إليها إلا من قبل البادئ) * * Author * * / Private Class Memento تنفذ Inarrowmemento {// Blood Value Final Int Blood ؛ // قوة القيمة الخاصة بالسيف النهائي ؛ // Constructor تهيئة محتوى MEMENTO الخاص (Int Blood ، int sword) {this.blood = Blood ؛ this.sword = السيف ؛ } private int getBlood () {return Blood ؛ } private int getSword () {return sword ؛ }}}3.3 مدير مذكرة - القائم بأعمال القائم بأعماله
package com.demo.caretaker ؛ import com.demo.memento.inarrowmemento ؛/** * Administrator * * author * */public class caretaker {private inarrowmemento memento ؛ / ** * get get memorandum object * * @regurn */ public inarrowmemento getMemento () {return memento ؛ } / ** * حفظ memorandum كائن * * param memento * / public void setMemento (inarrowmemento memento) {this.memento = memento ؛ }}3.4 دع البطل يتحدى العميل المدرب
package com.demo ؛ import com.demo.caretaker.caretaker ؛ import com.demo.originator.hero ؛/** * Application Main Application * * Author * */public class client {/** * param args */public static void main (string) {// Create Role Hero = New Hero () ؛ // إنشاء المسؤول عن القائم بأعمال الاعتداء = New Caretaker () ؛ // حفظ معلومات الحالة قبل التحدي caretaker.setMemento (Hero.creatememento ()) ؛ // لا توجد سوى ثلاث فرص لهزيمة Boss int cnt = 1 ؛ // challenge boss result int ko = -1 ؛ بينما (ko! = 1 && cnt <= 3) {system.out .println ("====================" + CNT + "التحدي ============================================================================= ============================================================================= {ko == -1) }}4 نتائج التشغيل
إنشاء مذكرة ...
=======================================
قيمة الدم الحالية: 100 - قيمة القوة الحالية: 100
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 96 - قيمة القوة الحالية: 99
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 90 - قيمة القوة الحالية: 98
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 81 - قيمة القوة الحالية: 95
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 78 - قيمة القوة الحالية: 93
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 72 - قيمة القوة الحالية: 88
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 64 - قيمة القوة الحالية: 85
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 56 - قيمة القوة الحالية: 80
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 49 - قيمة القوة الحالية: 73
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 45 - قيمة القوة الحالية: 71
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 37 - قيمة القوة الحالية: 68
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 29 - قيمة القوة الحالية: 65
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 20 - قيمة القوة الحالية: 59
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 11 - قيمة القوة الحالية: 54
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 9 - قيمة القوة الحالية: 52
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 3 - قيمة القوة الحالية: 45
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: -3 - قيمة القوة الحالية: 41
فشل في تحدي الرئيس!
استعادة الحالة في المذكرة ...
======================= 2Nd Challenge ===============
قيمة الدم الحالية: 100 - قيمة القوة الحالية: 100
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 96 - قيمة القوة الحالية: 95
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 96 - قيمة القوة الحالية: 91
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 88 - قيمة القوة الحالية: 82
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 79 - قيمة القوة الحالية: 79
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 76 - قيمة القوة الحالية: 72
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 73 - قيمة القوة الحالية: 70
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 72 - قيمة القوة الحالية: 66
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 72 - قيمة القوة الحالية: 61
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 72 - قيمة القوة الحالية: 58
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 72 - قيمة القوة الحالية: 52
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 63 - قيمة القوة الحالية: 51
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 62 - قيمة القوة الحالية: 50
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 54 - قيمة القوة الحالية: 41
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 50 - قيمة القوة الحالية: 39
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 47 - قيمة القوة الحالية: 39
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 43 - قيمة القوة الحالية: 38
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 37 - قيمة القوة الحالية: 36
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 34 - قيمة القوة الحالية: 35
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 32 - قيمة القوة الحالية: 27
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 28 - قيمة القوة الحالية: 22
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 26 - قيمة القوة الحالية: 15
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 24 - قيمة القوة الحالية: 11
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 19 - قيمة القوة الحالية: 3
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 10 - قيمة القوة الحالية: -3
فشل في تحدي الرئيس!
استعادة الحالة في المذكرة ...
==================== التحدي الثالث ==================
قيمة الدم الحالية: 100 - قيمة القوة الحالية: 100
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 99 - قيمة القوة الحالية: 93
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 98 - قيمة القوة الحالية: 84
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 98 - قيمة القوة الحالية: 82
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 95 - قيمة القوة الحالية: 76
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 88 - قيمة القوة الحالية: 68
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 81 - قيمة القوة الحالية: 64
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 76 - قيمة القوة الحالية: 64
استمر في مهاجمة الرئيس ...
قيمة الدم الحالية: 67 - قيمة القوة الحالية: 64
تهانينا ، لقد تحدت بنجاح الرئيس!
ثالثا. مبادئ تصميم هذا النمط
1. الحفاظ على حدود الحزمة
2 تطبيق واجهة مزدوجة لضمان الأمان.
4. استخدام المناسبات
1 عندما يكون من الضروري استعادة الحالة السابقة للكائن في لحظة معينة.
2. في وضع مذكرة المربع الأبيض ، تحتاج إلى حفظ حالة كائن ما في لحظة معينة من الخارج ، ولكن إذا كنت تستخدم واجهة للسماح لكائنات أخرى بالحصول على هذه الحالات مباشرة ، فسوف يعرض تفاصيل تنفيذ الكائن وتدمير تغليف الكائن.
يوفر تطبيق Mode Mode Black Box Mode آلية وصول للواجهة مزدوجة ، وتوفير واجهة واسعة لكائن البادئ ، والواجهة الضيقة إلى كائنات أخرى غير البادئ ، وبالتالي حل التغليف والأمان بشكل فعال.
خامسا مخطط فئة ثابتة
1 مربع أبيض وضع مذكرة الرسم البياني فئة ثابتة
2 وضع المذكرة السوداء وضع الفئة الثابتة
لمزيد من المحتوى المتعلق بـ Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص Tips Java Operation DOM" ، "ملخص ملف Java ونصائح تشغيل الدليل" و "ملخص نصائح Java Cache Operation Tips"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.