Встречается на собеседованиях • сегодня
Какие используешь паттерны проектирования
В 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
{
void Add(T entity);
T GetById(int id);
}
public class UserRepository : IRepository
{
// реализация работы с БД
}
```
Также часто использую:
- **Observer** для событийной модели
- **Decorator** для динамического добавления функциональности
- **Strategy** для замены алгоритмов
- **Dependency Injection** как архитектурный паттерн
Выбор зависит от задачи - важно не злоупотреблять паттернами там, где можно обойтись простым решением.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
