رادکام
الگوی Strategy یکی از الگوهای رفتاری می باشد. این الگو شامل مجموعه ای از الگوریتم ها می باشد که برای یک عمل خاص مورد استفاده قرار می گیرد و هر کدام از آن ها نتایج یکسانی خواهد داشت. هر الگوریتم به صورت جداگانه در کلاسی پیاده سازی شده و کپسوله می شود که این امر امکان تعویض الگوریتم های مختلف را به ما خواهد داد. با استفاده از الگوی Strategy امکان تغییر دادن الگوریتم هنگام استفاده از آن ها و در زمان اجرا وجود خواهد داشت.
الگوی Strategy را می توان در موارد زیر استفاده نمود:
همان طور که در دیاگرام مشخص است نمودار کلاس الگوی Strategy شامل کلاس های زیر است:
در ادامه، پیاده سازی این الگو را در یک مثال توضیح می دهیم:
فرض کنید میخواهید به مقصد خاصی بروید، برای انجام این کار می توانید از وسایل نقلیه مختلفی استفاده نمایید و میخواهید زمان رسیدن به مقصد با هر کدام از وسایل را بدانید، در این صورت می توانید از الگوی طراحی استراتژی برای محاسبه زمان رسیدن به مقصد استفاده نمایید.
ابتدا باید یک Interface به نام IStrategy به صورت زیر پیاده سازی نمود:
public interface IStrategy {
string GetTravelTime(string source, string destination);
}
فرض کنید سه نوع وسیله نقلیه وجود دارد، بنابراین می توانید هر کدام از آن ها را به صورت یک استراتژی پیاده سازی نمایید:
public class CarStrategy: IStrategy {
public string GetTravelTime(string source, string destination) {
return "It takes 40 minutes to reach from " + source + " to " + destination + " using Car.";
}
}
public class BikeStrategy: IStrategy {
public string GetTravelTime(string source, string destination) {
return "It takes 25 minutes to reach from " + source + " to " + destination + " using Bike.";
}
}
public class BusStrategy: IStrategy {
public string GetTravelTime(string source, string destination) {
return "It takes 60 minutes to reach from " + source + " to " + destination + " using Bus.";
}
}
در نهایت، باید یک کلاس Context به صورت زیر پیاده سازی نمود که بتوان در هر زمان استراتژی مختلفی را انتخاب نمود:
public class TravelStrategy {
private IStrategy _strategy;
public TravelStrategy(IStrategy chosenStrategy) {
_strategy = chosenStrategy;
}
public void GetTravelTime(string source, string destination) {
var result = _strategy.GetTravelTime(source, destination);
Console.WriteLine(result);
}
}
بنابراین در برنامه می توان پس از دریافت نوع وسیله نقلیه (استراتژی)، مدت زمان رسیدن به مقصد توسط آن وسیله نقلیه را محاسبه نمود:
void Main() {
Console.WriteLine("Hello!, Please select the mode of transport to get the travel time between source and destination: \nCar \nBike \nBus");
var userStrategy = Console.ReadLine().ToLower();
Console.WriteLine("\nUser has selected *" + userStrategy + "* as mode of transport\n");
Console.WriteLine("\n*****************************************************************************************************\n");
switch (userStrategy) {
case "car":
new TravelStrategy(new CarStrategy()).GetTravelTime("Point A", "Point B");
break;
case "bike":
new TravelStrategy(new BikeStrategy()).GetTravelTime("Point A", "Point B");
break;
case "bus":
new TravelStrategy(new BusStrategy()).GetTravelTime("Point A", "Point B");
break;
default:
Console.WriteLine("You have chosen an invalid mode of transport.");
break;
}
}
1,440بازدید
دیدگاه کاربران
هنوز دیدگاهی ثبت نشده است.
شما میتوانید درباره این مقاله، دیدگاه خود را ثبت کنید.