Strategy
Zuletzt aktualisiert
Zuletzt aktualisiert
Strategy ist ein verhaltensorientiertes Entwurfsmuster, mit dem du eine Familie von Algorithmen definierst, jeden von ihnen in einer eigenen Klasse unterbringst und ihre Objekte austauschbar machen kannst.
public class Context
{
private Strategy? _strategy;
public void SetStrategy(Strategy strategy)
{
_strategy = strategy;
}
public void ExecuteStrategy()
{
_strategy?.Execute();
}
}
public interface Strategy
{
void Execute();
}
public class ConcreteStrategyA : Strategy
{
public void Execute()
{
Console.WriteLine("Executing strategy A");
}
}
public class ConcreteStrategyB : Strategy
{
public void Execute()
{
Console.WriteLine("Executing strategy B");
}
}
public class ConcreteStrategyC : Strategy
{
public void Execute()
{
Console.WriteLine("Executing strategy C");
}
}
public class ShoppingCart
{
private IPaymentStrategy? _strategy;
public void SetStrategy(IPaymentStrategy strategy)
{
_strategy = strategy;
}
public void Checkout(decimal amount)
{
_strategy?.Pay(amount);
}
}
public interface IPaymentStrategy
{
void Pay(decimal amount);
}
public class CreditCardStrategy(
string name,
string cardNumber,
string cvv,
string dateOfExpiry) : IPaymentStrategy
{
private string _name = name;
private string _cardNumber = cardNumber;
private string _cvv = cvv;
private string _dateOfExpiry = dateOfExpiry;
public void Pay(decimal amount)
{
Console.WriteLine($"Paid {amount} using credit card");
}
}
public class BankTransferStrategy(string bankName, string accountNumber) : IPaymentStrategy
{
private readonly string _bankName = bankName;
private readonly string _accountNumber = accountNumber;
public void Pay(decimal amount)
{
Console.WriteLine($"Paid {amount} using Bank Transfer");
}
}
public class PayPalStrategy(string email, string password) : IPaymentStrategy
{
private string _email = email;
private string _password = password;
public void Pay(decimal amount)
{
Console.WriteLine($"Paid {amount} using PayPal");
}
}