الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Strategy را معرفی کنیم.
الگوی طراحی Strategy یک الگوی طراحی رفتاری(behavioral) است که امکان تعریف دسته ای از متدها را فراهم میکند که در زمان اجرا قابل تعویض هستند. این الگو به متد های با رویکرد متفاوت اجازه می دهد تا مستقل از اشیائی که از آن استفاده می کنند باشند. با استفاده از این الگو میتوان عملکرد اشیاء را در زمان اجرا و بر اساس شرایط تغییر داد.
الگوی 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 مقدار نهایی با توجه به استراتژی موجود تغییر میکند.
الگوی طراحی استراتژی زمانی مفید است که چندین الگوریتم وجود داشته باشد که میتوان به جای یکدیگر از آنها استفاده کرد. با کپسوله کردن هر الگوریتم در یک کلاس جداگانه و پیاده سازی آنها با استفاده از یک رابط مشترک، راهی برای تغییر رویکرد در زمان اجرا بدون تأثیر بر کد کلاینت فراهم میشود.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه