# تعریف
استخوانبندی و شالودهٔ اصلی عملیات الگوریتم را تعریف میکند، و پیادهسازی هر مرحله را به زیرکلاسها میسپارد. این الگو، به زیرکلاسها این اختیار را میدهد که تا خودشان، مراحل الگوریتم را پیاده کنند بدون اینکه ساختار الگوریتم را تغییر دهند.
در این الگو ساختار اصلی الگوریتم را در متدی به نام TemplateMethod طراحی میکنیم. این متد دارای یک سری عملیات اولیه (Primitive Operations) است. این متد را دسترسی پابلیک میدهیم و تمامی عملیات اولیه را ابسترکت و protected میکنیم تا کلاسهای کانکرت به دلخواه خود توابع اولیهٔ مناسب خود را طراحی کنند.
- این الگو کنترل بیشتری نسبت به الگوی Strategy نسبت به الگوریتمهای متفاوت دارد.
- الگوی استراتژی از Composition استفاده میکد و الگوی تمپلیت متد از وراثت. الگوی استراتژی flexibility بیشتری نسبت به تمپلیت متد دارد.
- الگوی تملیت متد با استفاده از متدهای Hook برای ساخت فریمورک مناسب است.
- الگوی طراحی تملیت متد دارای Depenency است در صورتی که الگوی طراحی استراتژی به دلیل استفاده از کامپوزیشن عاری از Dependency است.
- الگوی طراحی تمپلیت متد از اصل هالیوود استفاده میکند، اصل هالیوود میگوید: با ما تماس نگیرید، ما با شما تماس میگیریم.
- Hollywood principle - Wikipedia, the free encyclopedia
- این الگو مراحل را خود تعریف میکند اما در پیادهسازی هر یک از مراحل اختیار را به زیرکلاسها میدهد.
- این الگو نمونهای از Code Reuse است.
- هوکها متدهایی هستند که کاری انجام نمیدهند یا عمل پیشفرضی در کلاس ابسترکت انجام میدهند. هوکها «ممکن» است توسط زیرکلاسها override شوند و عمل پیشفرض آنها تغییر کند.
- برای جلوگیری override کردن متد تمپلیت توسط زیرکلاسها، متند تمپلیت را final کنید.
- الگوی طراحی Factory Method نیز حالت خاصی از الگوی طراحی Template Method است.
- عملیات اولیه را به صورت ابسترکت «معرفی» میکند. البته اگر عملیاتی اختیاریست یعنی کلاسهای کانکرت میتوانند آن را override کنند یا نه، میتوان چنین عملیات اختیاری را به صورت Hook تعریف کرد.
- متد TemplateMethod را که ساختار الگوریتم است را «پیادهسازی» میکند. این متد در کلاسهای کانکرت Override نمیشود. (final در جاوا)
هر کانکرت کلاسی، عملیات اولیه را مطابق کلاس خود پیاده سازی میکند.
- متدهای start و stop و init و destroy در کلاس Applet در جاوا.
- متد paint در کلاس JFrame در کتابخانهٔ جاوا.
روال تولید سند برای انواع و اقسام سندها یکسان است:
- فسمت Header سند را تولید کن.
- قسمت بدنهٔ سند را تولید کن.
- جزئیات سند را تولید کن.
اما پیادهسازی هر یک از این روالها برای ساخت PDF و HTML و Doc و ... متفاوت است. بنابراین می توانیم از الگوی طراحی TemplateMethod استفاده کنیم.
- Template Method: زیرکلاسها تصمیم می گیرند که مراحل اجرای الگوریتم را چطور پیاده سازی کنند.
- Strategy: رفتارهای قابل تغییر را کپسوله میکند و از واگذاری و دلگیشن استفاده میکند تا در زمان اجرا تصمیم بگیرد که کدام رفتار اعمال شود.
- Factory Method: زیرکلاسها تصمیم میگیرند که کدام یک از کلاسهای کانکرت، ایجاد شوند.
- All non-abstract methods of java.io.InputStream, java.io.OutputStream, java.io.Reader and java.io.Writer.
- All non-abstract methods of java.util.AbstractList, java.util.AbstractSet and java.util.AbstractMap.
- javax.servlet.http.HttpServlet, all the doXXX() methods by default sends a HTTP 405 "Method Not Allowed" error to the response. You're free to implement none or any of them.