معرفی الگوی طراحی Strategy

معرفی الگوی طراحی Strategy

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

22 اردیبهشت 1402

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

الگوی طراحی Strategy یک الگوی طراحی رفتاری(behavioral) است که امکان تعریف دسته ای از متد‌ها را فراهم می‌کند که در زمان اجرا قابل تعویض هستند. این الگو به متد های با رویکرد متفاوت اجازه می دهد تا مستقل از اشیائی که از آن استفاده می کنند باشند. با استفاده از این الگو می‌توان عملکرد اشیاء را در زمان اجرا و بر اساس شرایط تغییر داد.

 

الگوی Strategy از اجزاء مختلفی تشکیل شده است:

  • Context: شیئی که در شرایط مختلف و بر اساس استراتژی های موجود، رفتار خود را تغییر می‌دهد. این شئ همیشه یک نمونه از Strategy قابل اجرا را در خود نگهداری می‌کند.
  • Strategy: رابطی که همه Strategy ها باید آن را پیاده سازی کنند تا قابل استفاده توسط Context قرار گیرند.
  • Concrete Strategies: کلاس هایی که رابط Strategy را پیاده سازی می کنند و پیاده سازی های متفاوتی از یک الگوریتم را ارائه می دهند.

در ادامه مثالی از نحوه استفاده از الگوی طراحی Strategy در سی شارپ آورده شده است:

// Context class
public class ShoppingCart
{
    private IShippingStrategy _shippingStrategy;
    public ShoppingCart(IShippingStrategy shippingStrategy)
    {
        _shippingStrategy = shippingStrategy;
    }
    public void SetShippingStrategy(IShippingStrategy shippingStrategy)
    {
        _shippingStrategy = shippingStrategy;
    }
    public double CalculateShippingCost(Order order)
    {
        return _shippingStrategy.CalculateShippingCost(order);
    }
}
// Strategy interface
public interface IShippingStrategy
{
    double CalculateShippingCost(Order order);
}
// Concrete Strategies
public class StandardShippingStrategy : IShippingStrategy
{
    public double CalculateShippingCost(Order order)
    {
        return 5.00;
    }
}
public class ExpeditedShippingStrategy : IShippingStrategy
{
    public double CalculateShippingCost(Order order)
    {
        return 10.00;
    }
}
// Client code
var cart = new ShoppingCart(new StandardShippingStrategy());
var order = new Order();
// Calculate shipping cost using the current strategy
var shippingCost = cart.CalculateShippingCost(order); // returns 5.00
// Change the strategy to expedited shipping
cart.SetShippingStrategy(new ExpeditedShippingStrategy());
// Calculate shipping cost using the new strategy
shippingCost = cart.CalculateShippingCost(order); // returns 10.00

در این مثال، الگوی طراحی استراتژی برای محاسبه هزینه های حمل و نقل خرید استفاده می شود. کلاس ShoppingCart به عنوان Context، رابط IShippingStrategy به عنوان Strategy و کلاس های StandardShippingStrategy و ExpeditedShippingStrategy استراتژی های موجود هستند. کد کلاینت می تواند با فراخوانی متد SetShippingStrategy در شی ShoppingCart، استراتژی حمل و نقل را به صورت پویا تغییر دهد. در نهایت با فراخوانی CalculateShippingCost مقدار نهایی با توجه به استراتژی موجود تغییر می‌کند.

الگوی طراحی استراتژی زمانی مفید است که چندین الگوریتم وجود داشته باشد که می‌توان به جای یکدیگر از آنها استفاده کرد. با کپسوله کردن هر الگوریتم در یک کلاس جداگانه و پیاده سازی آنها با استفاده از یک رابط مشترک، راهی برای تغییر رویکرد در زمان اجرا بدون تأثیر بر کد کلاینت فراهم می‌شود.

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

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) نیاز دارند.

ثبت دیدگاه