Olá, leitores!
Durante 2016 e 2017, abordei os 23 Design Patterns do Gang of Four (GoF) apresentando exemplos desenvolvidos com Delphi. Para facilitar a navegação entre os artigos e também construir uma base de conhecimento sobre o assunto, preparei uma retrospectiva dos artigos, agrupando-os de acordo com a família dos padrões de projeto. Para cada um deles, há uma breve descrição, links para download dos projetos de exemplos e links dos repositórios no GitHub!
Criacionais
1) Abstract Factory: Declara uma Interface responsável por criar uma fábrica de objetos similares sem especificar suas implentações concretas.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
2) Builder: Permite encapsular a lógica de construção de objetos, de modo que diferentes representações possam ser construídas com a mesma Interface.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
3) Factory Method: Disponibiliza uma forma de reduzir a complexidade ciclomática ao delegar a lógica de criação de objetos para as classes derivadas.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
4) Prototype: Permite clonar o estado e as propriedades de um objeto já existente para um novo objeto, criando uma cópia idêntica.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
5) Singleton: Provê um ponto único de acesso à instância de um objeto, de modo que qualquer local da aplicação consiga acessá-lo.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
Estruturais
6) Adapter: Atua como intermediário entre duas interfaces, de modo que elas possam se comunicar, tornando-se compatíveis.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
7) Bridge: Elimina múltiplas heranças e reduz a quantidade de classes ao desacoplar abstrações de suas implementações.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
8) Composite: Proporciona uma técnica para trabalhar com objetos individuais e grupos de objetos (composição) de modo uniforme.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
9) Decorator: Visa adicionar comportamentos extras a objetos em tempo de execução, reduzindo a necessidade de criar heranças.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
10) Façade: Disponibiliza um acesso simplificado a um conjunto de procedimentos complexos, também definido como “subsistemas”.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
11) Flyweight: Aprimora o desempenho e consumo de memória de uma aplicação através do compartilhamento de objetos em tempo de execução.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
12) Proxy: Declara uma classe que controla o acesso e utilização de um objeto complexo ou protegido, aprimorando a segurança e/ou performance.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
Comportamentais
13) Chain of Responsibility: Consiste em criar uma cadeia de objetos processadores, no qual cada um é responsável por processar um tipo de mensagem específica.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
14) Command: Visa encapsular requisições como objetos e permite a criação de filas de execução de comandos de forma customizada.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
15) Interpreter: Define uma representação para uma linguagem e fornece procedimentos para interpretá-la dinamicamente.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
16) Iterator: Consiste em um mecanismo para navegar entre os elementos de uma lista sem expor a representação dos dados processados.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
17) Mediator: Encapsula a interação entre objetos para reduzir a dependência, promovendo o baixo acoplamento na arquitetura.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
18) Memento: Cria um recurso de armazenamento de estados de um objeto, permitindo suas restaurações quando necessário.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
19) Observer: Um objeto específico é observado por outros objetos, de modo que estes sejam automaticamente notificados quando uma alteração ocorre no objeto principal.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
20) State: Permite que um objeto modifique o seu comportamento de acordo com o seu estado, proporcionando um alto nível de encapsulamento.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
21) Strategy: Fornece a capacidade de selecionar um algoritmo em tempo de execução, conforme a situação atual (ou regras de negócio) para executar uma tarefa específica.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
22) Template Method: Estabelece uma sequência de passos e permite que alguns deles sejam “delegados” para as subclasses em tempo de execução.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
23) Visitor: Orienta a separação de classes de estruturas e de operações, de forma que novos comportamentos possam ser adicionados a objetos sem alterá-los.
Artigo do blog | Download do projeto de exemplo | Repositório no GitHub
Recursos de apoio na web:
- SourceMaking
- Dofactory
- TutorialsPoint
- Design Patterns for Humans
- Derek Banas YouTube Channel (muito bom!)
Use a abuse dessa coleção de artigos!
Até breve, pessoal.
Compartilhado 😉
Obrigado, Marcão! 🙂
Excelentes artigos!
Estou drenando todo o conteúdo da página.
Parabéns e obrigado por compartilhar tudo isso.
Muito obrigado pelo comentário, Jean! Fico feliz que os artigos estejam lhe ajudando.
Em breve publicarei artigos sobre os Design Patterns GRASP.
Abraço!