Встречается на 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
интервью вопросы и ответы