'Strategy Design Pattern implementation, am I doing it right?
My assignment requires me to implement different Sorting Algorithms using the Strategy Pattern, a Gang of Four Design Pattern.
I'll be graded on the correctness of my Strategy Design Pattern implementation. So I did my research and from my understanding, learned that Strategy Design uses interface or abstract for different strategies. So here is what I did:
Interface:
public interface ISortStrategy
{
string Sort(string input);
}
Program:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Sort Strategy (bubblesort, quicksort, mergesort). Defaults to bubblesort");
ISortStrategy strategy = default;
var input = Console.ReadLine();
input = input.ToLower();
switch (input)
{
case "bubblesort":
strategy = new BubbleSort();
break;
case "quicksort":
strategy = new QuickSort();
break;
case "mergesort":
strategy = new MergeSort();
break;
default:
strategy = new BubbleSort();
break;
}
Console.WriteLine("Enter String to Sort");
var value = Console.ReadLine();
Console.Write("The sorted string is: " + strategy.Sort(value));
Console.ReadKey();
}
}
Sample MergeSort strategy:
public string Sort(string input)
{
var result = "";
int size = (input.Length % 2 == 0) ? input.Length / 2 : (input.Length + 1) / 2;
if (input.Length > 1)
{
char[] left = input.Substring(0, input.Length / 2).ToCharArray();
char[] right = input.Substring(input.Length / 2,input.Length - (input.Length / 2)).ToCharArray();
// recursively sort the two halves
Sort(left.Length.ToString());
Sort(right.Length.ToString());
// merge the sorted left and right subLists together
result = merge(input, left, right);
}
return result;
}
public string merge(string result, char[] left, char[] right)
{
int i1 = 0; // index for left
int i2 = 0; // index for right
var theString = result;
var aStringBuilder = new StringBuilder(theString);
for (int i = 0; i < aStringBuilder.Length; i++)
{
if (i2 >= right.Length || (i1 < left.Length && left.GetValue(i1).ToString().CompareTo(right.GetValue(i2).ToString()) < 0))
{
aStringBuilder.Remove(i, 1);
aStringBuilder.Insert(i, left.GetValue(i1).ToString());
i1++;
}
else
{
aStringBuilder.Remove(i, 1);
aStringBuilder.Insert(i, right.GetValue(i2).ToString());
i2++;
}
}
theString = aStringBuilder.ToString();
return theString;
}
}
The question is, I am doing this right? or how will I do it right?
Like my interface and BubbleSort only has method Sort(string input); but my MergeSort has another method merge(string result, char[] left, char[] right) is this ok under Strategy Design? Thank you for the response and advice!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
