C# 23 design patterns summary