گروه نرم افزاری هیلتن

الگوی طراحی: Command

الگوی طراحی Command



الگوی Command یکی از الگو های رفتاری است که ایده اصلی آن این است که یک درخواست در قالب یک شی کپسوله شود. وقتی که درخواست ها در قالب اشیا کپسوله می شوند به راحتی می توان آن ها را مدیریت نمود. تمام اطلاعات مورد نیاز برای اجرای یک درخواست را می توان در داخل یک شی قرار داده و درخواست ها را اجرا یا در داخل یک صف یا پشته قرار داد تا بعدا اجرا شوند. قرار دادن درخواست ها در داخل صف و پشته باعث می شود به راحتی Redo و Undo انجام داد. برای Undo کردن درخواست ها می توان آن ها را داخل یک پشته قرار دهیم که هنگام Undo کردن آن ها را معکوس اجرا کنیم. درخواست ها درقالب یک شی باید شامل داده ها و مقادیری که برای اجرا شدن لازم است باشند و نباید شامل الگوریتم ها و متد ها برای اجرا شدن باشند. الگوریتم ها و متد ها در قالب کلاس های گیرنده ای هستند که درخواست ها را گرفته و اجرا می کنند. کپسوله کردن درخواست ها اجازه می دهد درخواست ها با پارامترهای مختلف اجرا شوند.

هدف
فراهم کردن قابلیت مانندUndo ,Redo و لاگ گیری فعالیت های کاربر است.

انگیزه
گاهی در برنامه نیاز به قابلیت های مانندUndo ,Redo و لاگ گیری فعالیت های کاربر هستیم.

کاربرد
• نگهداری درخواست ها به شکل معنی دار
• دادن قابلیت Redo ,Undo به برنامه
• این الگو برای محیط های خوب هست که به صورت گروهی کار می کنند.

ساختار
در زیر نمودار کلاس دیاگرام الگوی Command نشان داده شده است.

نمودار کلاس دیاگرام الگوی Command

Command : کلاسی مجرد یا واسطی است که ساختار کلی فرمان ها را تعریف می کند.
ConcreteCommand: کلاس های که واسط Command را پیاده سازی می کنند و هر کدام معادل یک فرمان در برنامه هستند.
Recever: کلاسی که Commandها بر اساس آن ها کار خود را انجام می دهند.
Invoker: کلاسی که می تواند Command ها را اجرا کند.

الگوهای مرتبط: Composite: این الگو برای ا ایجاد فرمان می تواند استفاده شود.
Memento : برای نگهداری وضعیت فرمان ها و بازیابی آن ها می توان از الگوی Memento استفاده کرد.
Prototype: برای نمونه سازی از Commandها می توان از الگو Prototype استفاده نمود.

پیامد
1- یک Command لزوما از یک Receiver استفاده نمی کند.
2- از ترکیب چند Command می توان یک Command جدید ساخت

پیاده سازی:
یک ماشین حساب را در نظر بگیرید که قابلیت Redo ,Undo را داشته باشد. در صورتی که اعمالی که انجام می دهد در قالب یک Command باشد به راحتی می توان این عملیات را اجرایی نمود.

نقاط قوت:
• هر Receiver را می توان به صورت مستقل پیاده سازی نمود.
• فراهم کردن قابلیت های تراکنشی بر اساس این الگو

نقاط ضعف:
• تعرف برخی از Command ها ترکیبی ساده نیست.









گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن