Встречается на 23% собеседований по C#

Какие используешь паттерны проектирования

В C# часто применяю следующие паттерны:

Singleton - для единственного экземпляра класса:

csharp
public sealed class Singleton
{
    private static Singleton _instance;
    private static readonly object _lock = new object();

    private Singleton() { }

    public static Singleton GetInstance()
    {
        if (_instance == null)
        {
            lock (_lock)
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
            }
        }
        return _instance;
    }
}

Factory Method - создание объектов через интерфейс:

csharp
public interface IProduct {}
public class ConcreteProduct : IProduct {}

public abstract class Creator
{
    public abstract IProduct FactoryMethod();
}

public class ConcreteCreator : Creator
{
    public override IProduct FactoryMethod() => new ConcreteProduct();
}

Repository - абстракция доступа к данным:

csharp
public interface IRepository<T>
{
    void Add(T entity);
    T GetById(int id);
}

public class UserRepository : IRepository<User>
{
    // реализация работы с БД
}

Также часто использую:

  • Observer для событийной модели
  • Decorator для динамического добавления функциональности
  • Strategy для замены алгоритмов
  • Dependency Injection как архитектурный паттерн

Выбор зависит от задачи - важно не злоупотреблять паттернами там, где можно обойтись простым решением.

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы