Estou tentando educar meus colegas na área de padrões de design. Alguns dos padrões originais da Gangue dos Quatro são um pouco esotéricos, então estou me perguntando se existe um subgrupo de padrões "essenciais" que todos os programadores devem conhecer. Ao examinar a lista, acho que provavelmente já usei -
- Fábrica abstrata
- Método de fábrica
- Singleton
- Ponte
- Fachada
- Comando
Quais você realmente usa na prática e para que os usa?
design-patterns
Craig Schwarze
fonte
fonte
for, if, while...
etc" - difícil de medir o quão inútil isso seria.Respostas:
Aqui está uma lista de quais eu usei ou vi na prática:
Singleton - objeto de aplicativo no ASP.Net, sendo um excelente exemplo disso.
Adaptador - Conectar-se a bancos de dados geralmente pode envolver uma classe Adapter pelo menos na minha área de coisas .Net.
Fábrica - Geral para gerar objetos, embora eu tenha visto isso mais em alguns ASP clássicos mais antigos na época.
Estratégia - Eu tinha um aplicativo que, para cada tipo de dispositivo, tinha uma estrutura semelhante para a classe que consideraria uma implementação desse padrão.
Fachada - De certa forma, isso é semelhante ao padrão do adaptador em termos de algo que normalmente une alguns sistemas.
fonte
Os autores compilaram os padrões dos desenhos observados encontrados em aplicações reais. É provável que ninguém use todos eles, mas todos eles são usados.
fonte
Decorador .
EDIT : Em quase todos os projetos que ultrapassam o estágio 'trivial', um termina com uma interface IAction (os detalhes podem ser diferentes):
Na próxima hora, passo escrevendo muitas classes pequenas e quase triviais que implementam o IAction. Quando combinados, eles são muito poderosos e flexíveis.
Por exemplo, um
LogAction
(escreva para registrar e executar a IAction),NullAction
(não faça nada e retorne true),ActionList
(execute uma lista de IActions e retorne o AND dos bools). Em alguns casos, umAndAction
(retornar o AND de duas ações, pode estar em curto-circuito ou não)OrAction
, tambémNotAction
faz sentido.Embora tecnicamente, a partir dos exemplos acima, apenas o LogAction seja um Decorator (o outro não opera exatamente com 1 IAction), ainda considero isso uma generalização do padrão Decorator quando faço uma ActionList de LogAtions de IActions.
fonte
Suponho que você pretenda restringir a pergunta ao uso de padrões em códigos / projetos próprios (sem bibliotecas de classes e estruturas de terceiros).
Como outros, também usei os padrões de fábrica com mais freqüência. Então
fonte
Eu usei muitos dos outros que já foram mencionados (Singleton, Factory, Builder, Command, Strategy, etc ...)
Um que eu não vi mencionado ainda é o Flyweight, que eu costumo usar muito. Forneci um exemplo de implementação abaixo:
fonte
A maioria dos padrões originais da Gangue dos Quatro ainda é usada hoje em dia, mas existem outros agora populares que não estão no livro.
Encontre uma referência para Design Patters no idioma que você usa. Eles tendem a ser mais concretos e usam recursos específicos de linguagem para implementar os padrões de maneira mais sucinta e elegante.
Três ótimos recursos para Design Patterns:
Livro "Head First Design Patterns" - a linguagem de escolha é Java, mas é relevante para todas as linguagens. Padrões de Design dofactory - excelentes e gratuitas explicações sobre padrões de design .net com código. PluralSight - Design Patterns Library - este é pago, mas é bom demais para não incluí-lo na lista.
fonte
Bem, se você usa bibliotecas comuns como o ACE, acaba usando mais do que pensa. Eu uso o Observer / Observable extensivamente :-)
fonte
Usei um construtor pelo menos uma vez (o mesmo processo de conversão pode criar saída em HTML ou Excel).
Eu freqüentemente uso o método de modelo (para tarefas relacionadas ao JDBC ou controladores Swing abstratos).
Uma vez eu tive que desenvolver muitos novos recursos em um aplicativo baseado em formulário, o que foi uma bagunça. Eu só consegui progredir depois de refatorar o material existente para uma solução baseada em padrão de estado. (Bem, a maioria).
Eu também uso Comandos frequentemente (Ações de Swing) e Observadores também.
Uma vez eu usei uma solução semelhante a Mememento para detectar alterações nas formas Swing. O formulário serializaria seu estado com o que eu comparei (equals ()) com estados anteriores.
fonte
Acredito que os tenho ao longo da minha carreira. o único que tenho certeza de que não usei é o Padrão de Adaptador implementado com herança múltipla no livro, pois não sou um grande fã de herança múltipla.
fonte
Eu gosto de Decorator. O único que tenho adicionado aos mencionados é Proxy.
fonte