Design patterns — reusable solutions to common problems.
Singleton:
1public sealed class Singleton2{3 private static Singleton _instance;4 public static Singleton Instance =>5 _instance ??= new Singleton();6}7// Use: Logger, Configuration
Factory:
1public interface IShape { double Area(); }2public class Circle : IShape { ... }3public class Rectangle : IShape { ... }45public static IShape Create(string type) => type switch6{7 "circle" => new Circle(),8 "rectangle" => new Rectangle(),9 _ => throw new ArgumentException()10};
Observer:
1public event EventHandler<DataEventArgs> DataChanged;23protected virtual void OnDataChanged(Data data)4{5 DataChanged?.Invoke(this, new DataEventArgs(data));6}
Builder:
1var query = new QueryBuilder()2 .Select("name", "age")3 .From("users")4 .Where("age > 18")5 .Build();
Strategy:
1public interface ISortStrategy { void Sort(int[] array); }2public class BubbleSort : ISortStrategy { ... }3public class QuickSort : ISortStrategy { ... }