1. التعريف
دون تدمير التغليف ، التقاط الحالة الداخلية لكائن ما وحفظ هذه الحالة خارج الكائن. وبهذه الطريقة ، يمكن استعادة الكائن إلى حالته المحفوظة الأصلية لاحقًا.
2. أسباب الاستخدام
تريد استعادة الحالة الأصلية للكائن في مرحلة ما.
3. أمثلة على المواقف المعمول بها
هناك العديد من تطبيقات وضع المذكرة ، لكننا رأينا ذلك ، لكننا لم نفكر في الأمر بعناية. هذا هو مجرد استخدام وضع المذكرة. اسمحوا لي أن أعطيك بعض الأمثلة:
EG1. استخدام المذكرات في JSP+Javabean:
عند إضافة حساب في نظام ما ، تحتاج إلى ملء اسم المستخدم وكلمة المرور ورقم الاتصال والعنوان والمعلومات الأخرى في النموذج. إذا لم يتم ملء بعض الحقول أو تم ملؤها بشكل غير صحيح ، عندما ينقر المستخدم على زر "إرسال" ، فأنت بحاجة إلى حفظ الخيارات التي أدخلها المستخدم على الصفحة الجديدة ومطالبة بالخيارات الخاطئة. يتم تحقيق ذلك باستخدام خصائص Scope = "request" أو Scope = "Session" لـ Javabean ، أي أنه يتم تحقيقه باستخدام وضع المذكرة.
EG2. عند إصلاح مكابح السيارة. قم أولاً بإزالة الحواجز على كلا الجانبين لفضح وسادات الفرامل اليسرى واليسرى. يمكن إزالة قطعة واحدة فقط ، والقطعة الأخرى بمثابة مذكرة للإشارة إلى كيفية تثبيت الفرامل. فقط بعد اكتمال إصلاح هذه القطعة ، يمكن إزالة قطعة أخرى. عند إزالة القطعة الثانية ، تصبح القطعة الأولى مذكرة.
EG3. يقال أنه لا يوجد أسف دواء للشراء في الحياة. نحن جميعًا ندفع ثمن ما نقوم به ، ولكن في العالم الناعم ، هناك "طب ندم". بعد أن أغير حالات معينة من شيء ما ، طالما أنقذنا حالات معينة من الشيء من قبل ، يمكننا استعادة حالة الشيء من خلال وضع المذكرة. في الواقع ، هذا أيضًا "صندوق كنز مونل لايت" يمكنه العودة إلى الوراء ، وكلمة "السحر" مذهلة.
4. بنية الرسم البياني والوصف
(1) مخطط الفصل هو كما يلي:
(2) وصف الفصل (ط) Memento: دور المذكرة ، العمل الرئيسي هو كما يلي:
تخزين الحالة الداخلية لكائن البادئ ؛
يمكنه حماية محتواه من قراءته من قبل أي كائن غير كائن المنشئ.
(2) المنشئ: دور الراعي ، يكمل المهام التالية بشكل أساسي:
إنشاء كائن مذكرة مع الحالة الداخلية الحالية ؛
استخدم كائن المذكرة لتخزين حالته الداخلية.
(3) القائم بأعمال: الشخص المسؤول ، يتم الانتهاء من العمل على النحو التالي:
مسؤول عن الحفاظ على كائنات المذكرة ؛
لم يتم حفظ محتويات كائن المذكرة.
5. مثال
/ *** كائن البيانات*/ فئة البيانات العامة datastate {private string action ؛ setAction public void (عمل سلسلة) {this.action = Action ؛ } السلسلة العامة getAction () {return Action ؛ }} /*** كائن يحفظ نسخة من الحالة الداخلية لكائن آخر. وبهذه الطريقة ، يمكن استعادة الكائن إلى الحالة المحفوظة الأصلية في المستقبل. */ استيراد java.io.file ؛ استيراد java.io.serializable ؛ تنفس Memento الطبقة العامة قابلة للتسلسل { /*private int. ملف الملف الخاص = فارغ ؛ MEMENTO العامة (المنشئ O) {this.number = o.getNumber () ؛ this.file = o.getFile () ؛ } public int getNumber () {return this.number ؛ } public void setNumber (int number) {this.number = number ؛ } الملف العام getFile () {return this.file ؛ } public void setFile (file file) {this.file = file ؛ } */ dataState State الخاص ؛ MEMEMENTO العامة (المنشئ o) {this.state = o.getState () ؛ } DataState GetState () {return state ؛ } public void setState (DataState State) {this.state = state ؛ }} منشئ الطبقة العامة { /* private int number ؛ ملف الملف الخاص = فارغ ؛ Cemploratorator () {} // قم بإنشاء memento وقم بتمريره إلى memento العامة كمعلمة memento getMemento () {return new memento (this) ؛ } // أخرج البيانات المحفوظة من Memento واستعادتها إلى SetMemento الأصلي للدولة العامة (Memento M) {number = m.getNumber () ؛ ملف = m.getFile () ؛ } public int getNumber () {return number ؛ } public void setNumber (int number) {this.number = number ؛ } الملف العام getFile () {return file ؛ } public void setFile (file file) {this.file = file ؛ }*/ dataState State الخاص ؛ المنشئ العام () {} المنشئ العام (DataState State) {this.state = state ؛ } // قم بإنشاء memento وقم بتمريره إلى memento العامة كمعلمة memento getMemento () {return new memento (this) ؛ } // قم بإخراج البيانات المحفوظة من Memento واستعادتها إلى SetMemento الأصلي للدولة العامة (Memento M) { / * * يتم حفظ الكائن الذي تم إنشاؤه بواسطة getMemento () في حاوية. * عندما تحتاج إلى استعادة ، تمريرها إلى الطريقة الحالية ، ثم استخدم getState () للحصول على */ this.state = m.getState () ؛ } DataState GetState () {return state ؛ } public void setState (DataState State) {this.state = state ؛ }} /*** يتم استخدام المنشئ لتحميل البيانات ، وإنشاء كائنات mempleo ، واستعادة البيانات الأصلية من خلال Memento*/ TRASES Public Class {public static void main (string [] args) {// censhatorator = new Censhatorator () ؛ // cemplatator.setNumber (8) ؛ // // memento memento = cempling.getMemento () ؛ // system.out.println (memento.getnumber ()) ؛ DataState State = New DataState () ؛ state.setAction ("نسخ حرف") ؛ منشئ المنشئ = CERNINGARATARATOR () ؛ System.out.println ("إنشاء بيانات أصلية") ؛ Cempling.SetState (State) ؛ System.out.println ("إنشاء كائن مذكرة ، حفظ حالة البيانات الأصلية") ؛ memento memento = cempled.getMemento () ؛ System.out.println ("إنشاء بيانات جديدة") ؛ censpl.setState (dataState () جديد) ؛ System.out.println ("بعد إنشاء بيانات جديدة:" + censplatator.getState (). getAction ()) ؛ /** يجب حفظ Memento في مكان معين واسترجاعه عند الحاجة لاستعادة البيانات المحفوظة بداخلها*/ system.out.println ("استعادة البيانات الأصلية بعد إنشاء بيانات جديدة") ؛ Cemply.SetMemento (Memento) ؛ System.out.println (Cemply.getState (). getAction ()) ؛ }}مطبعة:
قم بإنشاء كائن مذكرة إنشاء البيانات الأصلية ، وحفظ حالة البيانات الأصلية ، قم بإنشاء بيانات جديدة بعد إنشاء بيانات جديدة: NULL بعد إنشاء بيانات جديدة ، واستعادة نسخ البيانات الأصلية A حرف