Os Design Patterns do Gang of Four (GoF) sao solucoes reutilizaveis para problemas recorrentes em design orientado a objetos. Em entrevistas .NET, os mais cobrados sao Strategy, Observer, Factory Method, Decorator e Repository. Conhecer onde o proprio framework usa esses padroes e um diferencial.

Categorias de Design Patterns

Os 23 padroes GoF sao divididos em tres categorias. Em entrevistas .NET, os mais relevantes estao destacados abaixo.

GoF Patterns23 patternsCreationalCriacao de objetosStructuralComposicaoBehavioralInteracaoFactoryIHttpClientFactoryDecoratorStream, MiddlewareStrategyDI + InterfaceObserverEvents, IObservable
CategoriaObjetivoPadroes mais cobradosUso no .NET
CreationalControlar como objetos sao criadosFactory Method, Abstract Factory, Singleton, BuilderIServiceCollection, HttpClientFactory
StructuralCompor objetos em estruturas maioresDecorator, Adapter, Facade, ProxyMiddleware pipeline, Stream wrappers
BehavioralDefinir como objetos interagemStrategy, Observer, Chain of Responsibility, Template MethodDI + interfaces, event, middleware chain

Padroes no ecossistema .NET

PatternOnde aparece no .NETExemplo concreto
StrategyDependency InjectionILogger, IAuthorizationHandler
ObserverEvents, Rx, IObservableevent EventHandler, IObservable<T>
Factory MethodIHttpClientFactoryCreateClient("name")
Abstract FactoryIServiceScopeFactoryCreateScope()
DecoratorMiddleware, StreamBufferedStream(new FileStream(...))
Chain of Resp.Middleware pipelineapp.UseAuthentication().UseAuthorization()
RepositoryData access layerDbContext como Unit of Work
BuilderHost/App configurationWebApplication.CreateBuilder()
SingletonDI containerservices.AddSingleton<T>()
Template MethodBase classesControllerBase, BackgroundService
Qual a diferenca entre um Design Pattern e um princΓ­pio SOLID?
Principios SOLID sao diretrizes gerais de design (ex: Dependency Inversion). Design Patterns sao solucoes concretas e nomeadas para problemas especificos (ex: Strategy implementa o principio Open/Closed). Patterns aplicam principios β€” nao sao a mesma coisa.
Quando NAO usar um Design Pattern?
Quando a complexidade adicionada nao se justifica. Um pattern existe para resolver um problema recorrente. Se o problema e simples ou nao vai mudar, aplicar um pattern e over-engineering. Siga YAGNI (You Aren't Gonna Need It).