الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Template Method را معرفی کنیم.
الگوی Template Method یک الگوی طراحی رفتاری(behavioral) است که اسکلت یک الگوریتم را در یک کلاس پایه تعریف میکند و به زیر کلاسها اجازه میدهد تا مراحل خاصی از الگوریتم را بدون تغییر ساختار کلی آن پیاده سازی کنند. این الگو زمانی مفید است که چندین کلاس عملیات مشابه اما با پیاده سازی های متفاوت داشته باشند.
الگوی Template Method از دو جزء اصلی تشکیل شده است:
در ادامه مثالی از الگوی طراحی Template Method به زبان سی شارپ قرار گرفته است:
public abstract class Pizza
{
public void Make()
{
PrepareDough();
AddSauce();
AddToppings();
Bake();
}
protected abstract void PrepareDough();
protected abstract void AddSauce();
protected abstract void AddToppings();
protected virtual void Bake()
{
Console.WriteLine("Baking pizza at 400 degrees for 20 minutes.");
}
}
public class PepperoniPizza : Pizza
{
protected override void PrepareDough()
{
Console.WriteLine("Preparing thick crust dough.");
}
protected override void AddSauce()
{
Console.WriteLine("Adding tomato sauce.");
}
protected override void AddToppings()
{
Console.WriteLine("Adding pepperoni, cheese, and mushrooms.");
}
}
public class MargheritaPizza : Pizza
{
protected override void PrepareDough()
{
Console.WriteLine("Preparing thin crust dough.");
}
protected override void AddSauce()
{
Console.WriteLine("Adding marinara sauce.");
}
protected override void AddToppings()
{
Console.WriteLine("Adding mozzarella cheese and basil.");
}
}
public class Program
{
public static void Main()
{
Pizza pepperoniPizza = new PepperoniPizza();
pepperoniPizza.Make();
Console.WriteLine();
Pizza margheritaPizza = new MargheritaPizza();
margheritaPizza.Make();
}
}
در این مثال، کلاس پایه انتزاعی Pizza الگوریتم کلی برای ساخت پیتزا را با متدهای انتزاعی PrepareDough، AddSauce و AddToppings تعریف می کند. متد Bake یک پیاده سازی پیش فرض دارد اما در صورت لزوم می توان آن را در زیر کلاس ها بازنویسی کرد. زیرکلاس های PepperoniPizza و MargheritaPizza متد های انتزاعی را برای ارائه های خاص خود از ساخت پیتزا پیاده سازی می کنند. در نهایت متد Main دو نمونه مختلف ایجاد میکند که هر دو با فراخوانی متد Bake انتزاعی ایجاد شده اند.
الگوی Template Method راهی برای تعریف یک الگوریتم مشترک در یک کلاس پایه ارائه میکند و به زیر کلاسها اجازه میدهد تا مراحل خاصی را با حفظ ساختار کلی الگوریتم اجرا کنند. این الگو استفاده مجدد از کد و انعطاف پذیری را در اجرای عملیات مشابه ممکن می کند.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه