این سایت برای ie9 طراحی نشده است

لطفا دستگاه خود را بچرخانید.

الگوی طراحی برنامه نویسی Strategy Design Pattern

۲۱ خرداد ۱۳۹۶ حسین صداقت
بدون دیدگاه

به نام خدا

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

نمودار UML این الگو به صورت زیر است:

الگوی طراحی Strategy

مثال:

فرض کنید ما قصد Sort کردن یک سری داده و اطلاعات را داریم و بر اساس تجربه به این نتیجه رسیده ایم که الگوریتم بهینه مرتب سازی اسامی ساکنان افراد یک استان الگوریتم Quick Sort می باشد.همچنین الگوریتم Merge Sort برای مرتب سازی تعداد محققان و الگوریتم Heap Sort برای مرتب سازی مسافران یک قطار مناسب است.

برای پیاده سازی این سناریو می توانیم به صورت زیر و با استفاده از Strategy Pattern این کار را انجام دهیم:

 

class Program
{
   static void Main(string[] args)
   {
      ISortingStrategy sortingStrategy = null;

      //Sorting the countyResidents
      List<string> countyResidents = new List<string>{ "ad","ac", "ax", "zw" };
      sortingStrategy = GetSortingOption(ObjectToSort.CountyResidents);
      sortingStrategy.Sort(countyResidents);

      //Sorting student numbers

      List<int> studentNumbers = new List<int>{ 123,678,543,  189};
      sortingStrategy = GetSortingOption(ObjectToSort.StudentNumber);
      sortingStrategy.Sort(studentNumbers);
      
      
      //Sorting railway passengers      
      List<string> railwayPassengers = new List<string> { "A21", "Z2", "F3", "G43" };
      sortingStrategy = GetSortingOption(ObjectToSort.RailwayPassengers);
      sortingStrategy.Sort(railwayPassengers);

    }

   private static ISortingStrategy GetSortingOption(ObjectToSort objectToSort)
   {
      ISortingStrategy sortingStrategy = null;

      switch (objectToSort)
      {
         case ObjectToSort.StudentNumber:
              sortingStrategy = new MergeSort();              
              break;
         case ObjectToSort.RailwayPassengers:
              sortingStrategy = new HeapSort();
              break;
         case ObjectToSort.CountyResidents:
              sortingStrategy = new QuickSort();
              break;
         default:
                    break;
      }
      return sortingStrategy;
   }
}

 

// Enum for different types of sortings.

 

public enum ObjectToSort
{
   StudentNumber,
   RailwayPassengers,
   CountyResidents
}

 

// Interface for the sorting strategy.

 

public interface ISortingStrategy 
{
   void Sort<T>(List<T> dataToBeSorted);
}

 

// Algorithm-Quicksort.

 

public class QuickSort : ISortingStrategy
{
   #region ISortingStrategy Members
      public void Sort<T>(List<T> dataToBeSorted)
      {
        //Logic for quick sort
      }
   #endregion
}

 

// Algorithm-Mergesort.

 

public class MergeSort : ISortingStrategy
{
   #region ISortingStrategy Members
      public void Sort<T>(List<T> dataToBeSorted)
      {
         //Logic for Merge sort
      }
   #endregion
}

 

// Algorithm-Heapsort.

 

public class HeapSort : ISortingStrategy
{
   #region ISortingStrategy Members
      public void Sort<T>(List<T> dataToBeSorted)
      {
         //Logic for Heap sort
      }
   #endregion
}

در مطلب بعدی الگوی طراحی Template Method را با هم بررسی خواهیم کرد.

منبع : https://www.codeproject.com/Articles/776819/Strategy-Pattern-Csharp

برچسب ها :