معرفی الگوی طراحی Template Method

معرفی الگوی طراحی Template Method

مدت مطالعه : 3 دقیقه

21 اردیبهشت 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی Template Method را معرفی کنیم.

الگوی Template Method یک الگوی طراحی رفتاری(behavioral) است که اسکلت یک الگوریتم را در یک کلاس پایه تعریف می‌کند و به زیر کلاس‌ها اجازه می‌دهد تا مراحل خاصی از الگوریتم را بدون تغییر ساختار کلی آن پیاده سازی کنند. این الگو زمانی مفید است که چندین کلاس عملیات مشابه اما با پیاده سازی های متفاوت داشته باشند.

 

الگوی Template Method از دو جزء اصلی تشکیل شده است:

  • کلاس پایه انتزاعی(Abstract Base Class): کلاس پایه شامل الگوریتم ها و متد های انتزاعی است که توسط زیر کلاس های آن پیاده سازی می شوند.
  • زیرکلاس ها (Concrete Subclasses): زیر کلاس ها متد های انتزاعی کلاس پایه را برای ارائه های خاصی از الگوریتم پیاده سازی می کنند.

در ادامه مثالی از الگوی طراحی 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 راهی برای تعریف یک الگوریتم مشترک در یک کلاس پایه ارائه می‌کند و به زیر کلاس‌ها اجازه می‌دهد تا مراحل خاصی را با حفظ ساختار کلی الگوریتم اجرا کنند. این الگو استفاده مجدد از کد و انعطاف پذیری را در اجرای عملیات مشابه ممکن می کند.

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

در چشم انداز همیشه در حال تحول توسعه نرم افزار، معماری میکروسرویس ها به دلیل مقیاس پذیری، انعطاف پذیری و توسعه پذیری محبوبیت قابل توجهی به دست آورده است. با این حال، با افزایش تعداد میکروسرویس ها در یک برنامه، مدیریت ارتباطات آنها و اطمینان از رؤیت صحیح همه آنها به طور فزاینده ای چالش برانگیز می شود. اینجاست که سرویس مش وارد عمل می شود.

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه