List data = new List { "Banana", "Abacaxi", "Caju", "Laranja", "Abacate", "Manga" }; OrdenacaoContext ordenacaoContext = new OrdenacaoContext(); List result = ordenacaoContext.GetDadosOrdenados("BubbleSort", data); Console.ReadKey(); public interface IOrdenacao { List GetDadosOrdenados(List dados); } public class BubbleSort : IOrdenacao { public List GetDadosOrdenados(List dados) { Console.WriteLine("BubbleSort"); return dados; } } public class HeapSort : IOrdenacao { public List GetDadosOrdenados(List dados) { Console.WriteLine("HeapSort"); return dados; } } public class MergeSort : IOrdenacao { public List GetDadosOrdenados(List dados) { Console.WriteLine("MergeSort"); return dados; } } public class InsertionSort : IOrdenacao { public List GetDadosOrdenados(List dados) { Console.WriteLine("InsertSort"); return dados; } } public class OrdenacaoContext { private Dictionary ordenacaoStrategy = new Dictionary(); public OrdenacaoContext() { ordenacaoStrategy.Add("BubbleSort", new BubbleSort()); ordenacaoStrategy.Add("HeapSort", new HeapSort()); ordenacaoStrategy.Add("MergeSort", new MergeSort()); ordenacaoStrategy.Add("InsertionSort", new InsertionSort()); } public List GetDadosOrdenados(string tipo, List dados) { return ordenacaoStrategy[tipo].GetDadosOrdenados(dados); } } //List GetDadosOrdenados(string tipo, List dados) //{ // List resultado = null; // switch (tipo) // { // case "BubbleSort": // //Ordenação Bubble // resultado = dados; // break; // case "HeapSort": // //Ordenação Heap Sort // resultado = dados; // break; // case "MergeSort": // //Ordenação Merge Sort // resultado = dados; // break; // case "InsertionSort": // //Ordenação Insertion Sort // resultado = dados; // break; // } // return resultado; //}