📚
Lerndokumentationen
.NET
.NET
  • Willkommen
  • C#
    • Variablen
      • Strings
      • Integers
      • Floats und Doubles
      • Booleans
      • Casting und Parsing
    • Kontrollstrukturen
      • if-Statements
      • Ternary-Operator
      • Switch-Statements und -Expressions
    • Collections
      • Arrays
      • Lists
      • Dictionaries
    • Loops
      • while-Loops
      • for-Loops
      • foreach-Loops
      • continue und break
    • Methoden
      • Callbacks und Delegates
      • Extension Methods
      • Lazy
    • Objektorientierte Programmierung
      • Fields und Properties
      • Methoden
      • Statisch vs. Instanzen
      • Konstruktoren
      • Vererbung
      • Komposition
      • Generics
      • Tupel
    • Referenz- und Wertetypen
      • Enums
      • Structs
      • Records
    • Binary und Strings
      • Kodierung von Strings und Bytes
      • Streams
      • XML und JSON
  • Design Patterns
    • Creational Patterns
      • Singleton
    • Structural Patterns
      • Decorator Pattern
    • Behavioral Patterns
      • Memento
      • Strategy
Bereitgestellt von GitBook
Auf dieser Seite
  • Klassendiagramm
  • Implementierung
  • Beispiel
  • Klassendiagramm
  • Implementierung
  1. Design Patterns
  2. Behavioral Patterns

Strategy

VorherigeMemento

Zuletzt aktualisiert vor 1 Monat

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.

Klassendiagramm

Implementierung

Context.cs
public class Context
{
    private Strategy? _strategy;

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

    public void ExecuteStrategy()
    {
        _strategy?.Execute();
    }
}
IStrategy.cs
public interface Strategy
{
    void Execute();
}
ConcreteStrategyA.cs
public class ConcreteStrategyA : Strategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy A");
    }
}
ConcreteStrategyB.cs
public class ConcreteStrategyB : Strategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy B");
    }
}
ConcreteStrategyC.cs
public class ConcreteStrategyC : Strategy
{
    public void Execute()
    {
        Console.WriteLine("Executing strategy C");
    }
}

Beispiel

Klassendiagramm

Implementierung

ShoppingCart.cs
public class ShoppingCart
{
    private IPaymentStrategy? _strategy;

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

    public void Checkout(decimal amount)
    {
        _strategy?.Pay(amount);
    }
}
IPaymentStrategy.cs
public interface IPaymentStrategy
{
    void Pay(decimal amount);
}
CreditCardStrategy.cs
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");
    }
}
BankTransferStrategy.cs
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");
    }
}
PayPalStrategy.cs
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");
    }
}