در برنامه نویسی شئ گرا، الگوی متد قالبی یکی از الگوهای طراحی رفتاری است که توسط اریک گاما و همکارانش تعریف شده است. در کتاب Design Patterns، متد قالبی، یک متد در یک ابرکلاس ( Superclass ) ( معمولاً از نوع انتزاعی Abstract ) ، می باشد. این متد اسکلت یک عملیات را بر اساس تعدادی از مراحل سطح بالا تعریف می کند. این مراحل خود توسط متدهای کمکی اضافی در همان کلاس متد قالبی پیاده سازی می شوند.
متدهای کمکی ممکن است از نوع انتزاعی باشند، که در این حالت برای پیاده سازی تجریدی ( Concrete ) و واقعی آن ها نیاز است به یک زیرکلاس ( Subclass ) یا به متدهای قلاب ( Hook methods ) ، که متدهایی با بدنهٔ خالی در کلاس پدر هستند. زیرکلاس ها می توانند با Override کردن متدهای Hook، عملیات مختص خود را شخصی سازی کنند. هدف متد قالبی تعریف ساختار کلی عملیات است، در عین این که به زیرکلاس ها اجازه بدهد مراحل خاصی از عملیات را اصلاح یا دوباره تعریف کنند.
این الگو دارای دو قسمت اصلی است:
• «متد قالبی» به عنوان یک متد در یک کلاس پایه ( Base Class ) ( معمولاً یک کلاس انتزاعی ) پیاده سازی می شود. این متد شامل کدی برای قسمت هایی از الگوریتم کلی برنامه است که ثابت هستند. این الگو تضمین می کند که الگوریتم اصلی برنامه همیشه دنبال می شود. در متد قالبی، بخش هایی از الگوریتم که ممکن است متفاوت باشند با ارسال پیام های شخصی که درخواست اجرای متدهای کمکی اضافی را دارند، پیاده سازی می شوند. در کلاس پایه، این متدهای کمکی یا به طور پیش فرض دارای پیاده سازی هستند یا اصلاً پیاده سازی ندارند ( به عبارت دیگر متدهای انتزاعی هستند ) .
• زیرکلاس های ( Subclasses ) کلاس پایه بخش های خالی یا «متغیر» متد «قالب» را با الگوریتم هایی مختص خود «پر می کنند». [ ۱] این نکته که زیرکلاس ها خود متد قالبی را Override نمی کنند، حائز اهمیت است.
در زمان اجرا، الگوریتم متد قالبی با ارسال پیام قالب به شئ ای از یکی از زیرکلاس های مجرد ( Concrete - پیاده سازی شده ) اجرا می شود. از طریق وراثت، متد قالبی در کلاس پایه شروع به اجرا شدن می کند. هنگامی که متد قالبی پیامی ر به خودا برای درخواست اجرای یکی از متد کمکی بفرستد، پیام توسط شئ های آن Subclass دریافت می شود. اگر متد کمکی Override شده باشد، پیاده سازی Override شده در آن زیرکلاس اجرا می شود. اما اگر Override نشده باشد، پیاده سازی به ارث رسیده از کلاس پایه اجرا می شود. این مکانیزم اطمینان حاصل می کند که الگوریتم کلی هر بار مراحل یکسانی را دنبال می کند، در حالی که اجازه می دهد جزئیات برخی مراحل بستگی به این دارد که درخواست اصلی اجرای الگوریتم را دریافت کرده است.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفمتدهای کمکی ممکن است از نوع انتزاعی باشند، که در این حالت برای پیاده سازی تجریدی ( Concrete ) و واقعی آن ها نیاز است به یک زیرکلاس ( Subclass ) یا به متدهای قلاب ( Hook methods ) ، که متدهایی با بدنهٔ خالی در کلاس پدر هستند. زیرکلاس ها می توانند با Override کردن متدهای Hook، عملیات مختص خود را شخصی سازی کنند. هدف متد قالبی تعریف ساختار کلی عملیات است، در عین این که به زیرکلاس ها اجازه بدهد مراحل خاصی از عملیات را اصلاح یا دوباره تعریف کنند.
این الگو دارای دو قسمت اصلی است:
• «متد قالبی» به عنوان یک متد در یک کلاس پایه ( Base Class ) ( معمولاً یک کلاس انتزاعی ) پیاده سازی می شود. این متد شامل کدی برای قسمت هایی از الگوریتم کلی برنامه است که ثابت هستند. این الگو تضمین می کند که الگوریتم اصلی برنامه همیشه دنبال می شود. در متد قالبی، بخش هایی از الگوریتم که ممکن است متفاوت باشند با ارسال پیام های شخصی که درخواست اجرای متدهای کمکی اضافی را دارند، پیاده سازی می شوند. در کلاس پایه، این متدهای کمکی یا به طور پیش فرض دارای پیاده سازی هستند یا اصلاً پیاده سازی ندارند ( به عبارت دیگر متدهای انتزاعی هستند ) .
• زیرکلاس های ( Subclasses ) کلاس پایه بخش های خالی یا «متغیر» متد «قالب» را با الگوریتم هایی مختص خود «پر می کنند». [ ۱] این نکته که زیرکلاس ها خود متد قالبی را Override نمی کنند، حائز اهمیت است.
در زمان اجرا، الگوریتم متد قالبی با ارسال پیام قالب به شئ ای از یکی از زیرکلاس های مجرد ( Concrete - پیاده سازی شده ) اجرا می شود. از طریق وراثت، متد قالبی در کلاس پایه شروع به اجرا شدن می کند. هنگامی که متد قالبی پیامی ر به خودا برای درخواست اجرای یکی از متد کمکی بفرستد، پیام توسط شئ های آن Subclass دریافت می شود. اگر متد کمکی Override شده باشد، پیاده سازی Override شده در آن زیرکلاس اجرا می شود. اما اگر Override نشده باشد، پیاده سازی به ارث رسیده از کلاس پایه اجرا می شود. این مکانیزم اطمینان حاصل می کند که الگوریتم کلی هر بار مراحل یکسانی را دنبال می کند، در حالی که اجازه می دهد جزئیات برخی مراحل بستگی به این دارد که درخواست اصلی اجرای الگوریتم را دریافت کرده است.
wiki: الگوی متد قالبی