![Padrões de Projeto em C#](/images/patterns/languages/csharp.png?id=32ddb10fd07b29840082dc5337558053)
![Padrões de Projeto em C#](/images/patterns/languages/mini/csharp.png?id=1478058bfa2905cd71379e5908efd772)
Padrões de Projeto em C#
O catálogo dos exemplos C#
Padrões criacionais
![Abstract Factory](/images/patterns/cards/abstract-factory-mini.png?id=4c3927c446313a38ce77dfee38111e27)
Abstract Factory
Permite que você produza famílias de objetos relacionados sem ter que especificar suas classes concretas.
![Builder](/images/patterns/cards/builder-mini.png?id=19b95fd05e6469679752c0554b116815)
Builder
Permite construir objetos complexos passo a passo. O padrão permite produzir diferentes tipos e representações de um objeto usando o mesmo código de construção.
![Factory Method](/images/patterns/cards/factory-method-mini.png?id=72619e9527893374b98a5913779ac167)
Factory Method
Fornece uma interface para criar objetos em uma superclasse, mas permite que as subclasses alterem o tipo de objetos que serão criados.
![Prototype](/images/patterns/cards/prototype-mini.png?id=bc3046bb39ff36574c08d49839fd1c8e)
Prototype
Permite que você copie objetos existentes sem fazer seu código ficar dependente de suas classes.
![Singleton](/images/patterns/cards/singleton-mini.png?id=914e1565dfdf15f240e766163bd303ec)
Singleton
Permite a você garantir que uma classe tem apenas uma instância, enquanto provê um ponto de acesso global para esta instância.
Padrões estruturais
![Adapter](/images/patterns/cards/adapter-mini.png?id=b2ee4f681fb589be5a0685b94692aebb)
Adapter
Permite a colaboração de objetos de interfaces incompatíveis.
![Bridge](/images/patterns/cards/bridge-mini.png?id=b389101d8ee8e23ffa1b534c704d0774)
Bridge
Permite que você divida uma classe grande ou um conjunto de classes intimamente ligadas em duas hierarquias separadas—abstração e implementação—que podem ser desenvolvidas independentemente umas das outras.
![Composite](/images/patterns/cards/composite-mini.png?id=a369d98d18b417f255d04568fd0131b8)
Composite
Permite que você componha objetos em estrutura de árvores e então trabalhe com essas estruturas como se fossem objetos individuais.
![Decorator](/images/patterns/cards/decorator-mini.png?id=d30458908e315af195cb183bc52dbef9)
Decorator
Permite que você adicione novos comportamentos a objetos colocando eles dentro de um envoltório (wrapper) de objetos que contém os comportamentos.
![Facade](/images/patterns/cards/facade-mini.png?id=71ad6fa98b168c11cb3a1a9517dedf78)
Facade
Fornece uma interface simplificada para uma biblioteca, um framework, ou qualquer outro conjunto complexo de classes.
![Flyweight](/images/patterns/cards/flyweight-mini.png?id=422ca8d2f90614dce810a8812c626698)
Flyweight
Permite que você coloque mais objetos na quantidade disponível de RAM ao compartilhar partes do estado entre múltiplos objetos ao invés de manter todos os dados em cada objeto.
![Proxy](/images/patterns/cards/proxy-mini.png?id=25890b11e7dc5af29625ccd0678b63a8)
Proxy
Permite que você forneça um substituto ou um espaço reservado para outro objeto. Um proxy controla o acesso ao objeto original, permitindo que você faça algo ou antes ou depois do pedido chegar ao objeto original.
Padrões comportamentais
![Chain of Responsibility](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Chain of Responsibility
Permite que você passe pedidos por uma corrente de handlers. Ao receber um pedido, cada handler decide se processa o pedido ou passa para o próximo handler da corrente.
![Command](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Command
Transforma o pedido em um objeto independente que contém toda a informação sobre o pedido. Essa Transformação permite que você parametrize métodos com diferentes pedidos, atrase ou coloque a execução do pedido em uma fila, e suporte operações que não podem ser feitas.
![Iterator](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Iterator
Permite que você percorra elementos de uma coleção sem expor as representações estruturais deles (lista, pilha, árvore, etc.)
![Mediator](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Mediator
Permite que você reduza as dependências caóticas entre objetos. O padrão restringe comunicações diretas entre objetos e os força a colaborar apenas através do objeto mediador.
![Memento](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Memento
Permite que você salve e restaure o estado anterior de um objeto sem revelar os detalhes de sua implementação.
![Observer](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Observer
Permite que você defina um mecanismo de assinatura para notificar múltiplos objetos sobre quaisquer eventos que aconteçam com o objeto que eles estão observando.
![State](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
State
Permite que um objeto altere seu comportamento quando seu estado interno muda. Parece como se o objeto mudasse de classe.
![Strategy](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Strategy
Permite que você defina uma família de algoritmos, coloque-os em classes separadas, e faça os objetos deles intercambiáveis.
![Template Method](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Template Method
Define o esqueleto de um algoritmo na superclasse mas deixa as subclasses sobrescreverem etapas específicas do algoritmo sem modificar sua estrutura.
![Visitor](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Visitor
Permite que você separe algoritmos dos objetos nos quais eles operam.