Код IT
← Каталог

Паттерн "Стратегия" в C# — когда нужен, а когда достаточно делегата — Классическая реализация (GoF)

Фрагмент из «Паттерн "Стратегия" в C# — когда нужен, а когда достаточно делегата»: Классическая реализация (GoF).

csharp projectencyclopedia7-06-proektirovanie-i-arhitektura-design-patterns-117 embed URL статья в энциклопедии
C# main.cs
public interface ISortStrategy
{
    void Sort(List<int> list);
}

public class BubbleSortStrategy : ISortStrategy
{
    public void Sort(List<int> list)
    {
        // пузырьковая сортировка
    }
}

public class QuickSortStrategy : ISortStrategy
{
    public void Sort(List<int> list)
    {
        // быстрая сортировка
    }
}

public class SortContext
{
    private ISortStrategy _strategy;

    public SortContext(ISortStrategy strategy) => _strategy = strategy;

    public void SetStrategy(ISortStrategy strategy) => _strategy = strategy;

    public void ExecuteSort(List<int> list) => _strategy.Sort(list);
}
public interface ISortStrategy
{
    void Sort(List<int> list);
}

public class BubbleSortStrategy : ISortStrategy
{
    public void Sort(List<int> list)
    {
        // пузырьковая сортировка
    }
}

public class QuickSortStrategy : ISortStrategy
{
    public void Sort(List<int> list)
    {
        // быстрая сортировка
    }
}

public class SortContext
{
    private ISortStrategy _strategy;

    public SortContext(ISortStrategy strategy) => _strategy = strategy;

    public void SetStrategy(ISortStrategy strategy) => _strategy = strategy;

    public void ExecuteSort(List<int> list) => _strategy.Sort(list);
}