برنامه نویس اندروید - https://www.linkedin.com/in/iryebohs/
الگویِ طراحیِ Memento (جاوا و کاتلین)
تا حالا شما بگید "عه ، این چه کاری بود کردم" و آرزو میکردید زمان برمیگشت تا بتونید وضعیت اون موقعتون رو داشته باشید ؟ خلاصه بگم Memento دقیقا همین کار رو میکنه ! Memento در لغت به معنی یادآوری میشه ، ما هم در این الگو به گذشته و حالتهایِ (State) قبلیِ شئ برمیگردیم . فایده استفاده از این الگو در عملیاتی مثل undo یا تهیه Log ای از سوابق اعمال بر روی شئ یا ... هست .
در این الگو چند بخش داریم :
Originator
شئای هست که قصد داریم Memento رو روش اعمال کنیم و بعدا بتونیم بازیابیش کنیم
Memento
کلاسی که شامل اطلاعاتِ مورد نظره که قراره بازیابی بشه
Caretaker
کلاسی که فرمان به عملیاتِ بازیابی میده
شِمایِ کلی قضیه به صورتِ زیره :
طبقِ این UML ما این طور عمل میکنیم که کلاسِ Caretaker شئ Memento رو در اختیار خودش داره و Memento و Originator با هم این سابقه رو تهیه میکنند .
صورت مساله
در کلیپ بورد گوشی متون مختلفی وجود دارند ، با Memento کدی مینویسیم که بتواند به همهی این متون دسترسی پیدا کنه و بتونه آخرین متن رو حذف کنه (مثلا معادل undo)
اول از همه Originator ، Originator در اینجا کلاسی به اسم ClipBoard میشه که در هر لحظه فقط یک متن رو در خودش داره ، کلاس Memento ما باید مقادیر مورد نیاز از ClipBoard رو داشته باشه که اینجا فقط یه String هست ، فرض میکنیم در ClipBoard متغیر دیگهای جز String هم هست به اسم dataSize که طولِ اون رشته رو نگه میداره ، این متغیر رو لزومی نداره در Memento بیاریم چون با دسترسی به String میتونیم بعدا بدستش بیاریم (پس لازم نیست حافظه بیخودی بهش اختصاص بدیم) ، تابعی به نام copy در ClipBoard ایجاد میکنیم که وظیفهاش مقدار دهی String هست :
حالا نوبت به Caretaker میرسه که وظیفهاش انجام عملیاتِ گرفتن دیتاهاست ، در این کلاسِ لیستی از Memento رو داریم که میتونیم بهش اضافه ، کم (معادل undo) و ... کنیم :
و حالا کلاسِ ما آماده استفاده است :
نکته : یکی از بهترین ترکیبهای الگوها ، ترکیب Memento و Command هست ، ما در Command عملیاتهایی مثل undo و redo رو داریم که با Memento قابلیت پیادهسازی بهتری دارند
باقی مقالات در مورد الگویهای طراحی رو در این مقاله بخونید .
من رو در لینکدین و اینستاگرام دنبال کنید ???
اگه دوست داشتید میتونید به صفحه Spotify بنده هم برید و موسیقی های منو گوش بدید ???
مطلبی دیگر از این انتشارات
الگوهای طراحی یا Design Patterns
مطلبی دیگر از این انتشارات
سه سوال رایج همه مصاحبههای کاری
مطلبی دیگر از این انتشارات
قسمت دوم Java Zone (ماشین مجازی جاوا)