using System.Threading.Tasks;
namespace StrategyPattern;
public static class Program
public static async Task Main(string[] args)
var timePrefixed = new TimePrefixPrinterStrategy();
var userPrefixed = new UserPrefixPrinterStrategy();
var worker = new PrintWorker(timePrefixed);
await worker.Print("[WRN] Erhöhte Temperatur in Labor 3");
worker.ChangeStrategy(userPrefixed);
await worker.Print("Die Welt muss brennen!");
worker.ChangeStrategy(timePrefixed);
await worker.Print("[ERR] Feuer in Labor 3");
private IPrintStrategy _printStrategy;
public PrintWorker(IPrintStrategy printStrategy)
_printStrategy = printStrategy;
public async Task Print(string text)
await _printStrategy.Print(text);
public void ChangeStrategy(IPrintStrategy strategy)
_printStrategy = strategy;
public interface IPrintStrategy
Task Print(string value);
public sealed class TimePrefixPrinterStrategy : IPrintStrategy
public Task Print(string value)
Console.WriteLine($"[{DateTime.Now:s}] {value}");
return Task.CompletedTask;
public sealed class UserPrefixPrinterStrategy : IPrintStrategy
public Task Print(string value)
Console.WriteLine($"[{Environment.UserName}] {value}");
return Task.CompletedTask;