Padrão de estratégia C#

Resumo : neste tutorial, você aprenderá sobre o padrão de estratégia C# que permite alterar o comportamento de um objeto em tempo de execução.

Introdução ao padrão de estratégia C#

O padrão de design de estratégia permite escolher um algoritmo de uma família de algoritmos em tempo de execução, encapsulando cada algoritmo em uma classe e tornando-os intercambiáveis.

O padrão de projeto de estratégia resolve o problema de selecionar um algoritmo de um conjunto de algoritmos com base em uma condição, sem acoplar fortemente o código do cliente ao algoritmo selecionado.

Suponha que você tenha um programa que executa uma operação. Mas existem várias maneiras de realizar a mesma operação.

Para fazer isso, você pode implementar cada algoritmo como um método separado de uma classe. Mas isso tornaria o código difícil de manter e mais complexo se você quiser adicionar mais algoritmos. Em outras palavras, este design não está em conformidade com o princípio aberto-fechado .

O padrão de estratégia resolve esse problema permitindo encapsular cada algoritmo em uma classe separada e torná-los intercambiáveis.

O padrão de estratégia é útil quando você deseja oferecer suporte a diferentes variantes de um algoritmo. E não é prático implementar cada algoritmo como um método separado.

O padrão de estratégia também é útil quando você deseja selecionar um algoritmo em tempo de execução a partir de um conjunto de algoritmos relacionados.

Estrutura do padrão de estratégia

O diagrama UML a seguir ilustra o padrão de estratégia:

O padrão de estratégia consiste em três elementos principais:

  • Contexto : a classe que contém uma referência ao objeto de estratégia e é responsável pela execução do algoritmo.
  • Estratégia : a interface que define os métodos que devem ser implementados por cada estratégia concreta.
  • Estratégia Concreta : as classes que implementam a interface da estratégia fornecendo suas implementações do algoritmo.

Nesta estrutura, o objeto de contexto contém uma referência a um objeto de estratégia. Quando o objeto de contexto precisa executar o algoritmo, ele delega a tarefa ao objeto de estratégia.

Benefícios do padrão de estratégia

  • O padrão de estratégia permite que o cliente selecione o algoritmo a ser usado em tempo de execução.
  • O padrão de estratégia encapsula cada algoritmo em uma classe, facilitando sua modificação e extensão sem afetar os outros algoritmos.
  • O padrão de estratégia desacopla o algoritmo do código do cliente, reduzindo o acoplamento e promovendo a reutilização do código.

Mas os padrões de estratégia podem aumentar a complexidade da base de código adicionando classes extras.

Implementação do padrão de estratégia C#

O exemplo a seguir mostra uma implementação do padrão de estratégia em C#:

namespace StrategyPattern;

// Strategy interface
public interface IStrategy
{
    void Execute();
}

// Concrete strategy A
public class ConcreteStrategyA : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy A");
    }
}

// Concrete strategy B
public class ConcreteStrategyB : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy B");
    }
}

// Context
public class Context
{
    private IStrategy? _strategy;

    public void SetStrategy(IStrategy strategy)
    {
        _strategy = strategy;
    }

    public void ExecuteStrategy()
    {
        _strategy?.Execute();
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var context = new Context();

        // Use the strategy A
        context.SetStrategy(new ConcreteStrategyA());
        context.ExecuteStrategy();

        // Use the strategy B
        context.SetStrategy(new ConcreteStrategyB());
        context.ExecuteStrategy();
    }
}Linguagem de código:  C#  ( cs )

Usos conhecidos do padrão de estratégia em .NET

O padrão de estratégia é amplamente utilizado em .NET, incluindo:

  • A IComparerinterface no System.Collectionsnamespace.
  • A SortedListclasse no System.Collections.Specializednamespace.

Resumo

  • O padrão Strategy permite que os clientes selecionem um algoritmo específico de uma família de algoritmos em tempo de execução, sem acoplar fortemente o código do cliente ao algoritmo selecionado.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *