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
IComparer
interface noSystem.Collections
namespace. - A
SortedList
classe noSystem.Collections.Specialized
namespace.
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.