Principais Padrões de Projeto: Guia de Design Patterns
Classificado em Computação
Escrito em em
português com um tamanho de 4,37 KB
Padrão Builder
Quando precisamos criar objetos complexos, é interessante criá-los por partes. O padrão Builder permite:
- Director: Constrói um objeto utilizando a interface Builder.
- Builder: Especifica uma interface para o construtor do objeto.
- ConcreteBuilder: Uma implementação da interface Builder.
- Product: Objeto complexo que foi construído.
Este padrão permite variar a representação interna do objeto, provê controle durante o processo de criação e isola os códigos de construção e representação.
Padrão Proxy
Tem como objetivo proporcionar um espaço reservado para outro objeto controlar o acesso a ele.
- Subject: Interface do objeto.
- RealSubject: Implementação do objeto real.
- Proxy: Implementação do objeto proxy que encapsula o objeto real.
Tipos de proxy: Proxy Virtual, Proxy Remoto e Proxy Protetor.
Padrões Estruturais
São padrões que lidam com as estruturas do projeto, facilitando a comunicação entre suas entidades. Por enquanto, esse conceito permanecerá abstrato, mas de acordo com os padrões deste tipo, entenderemos melhor.
Wrappers
Envolver algo, adicionando mais responsabilidades a isso. Ou seja, adiciona uma fina camada em um objeto modificando seu comportamento. Problema: Em Java, não é possível adicionar tipos primitivos (int, char) nas estruturas de dados do pacote Collections, pois o framework só aceita objetos.
Padrão Adapter
Permite que classes incompatíveis trabalhem em conjunto. Converte a interface de uma classe em outra interface.
Padrão Composite
Permite aos clientes tratarem de maneira uniforme objetos individuais e composições de objetos. Compor objetos em estruturas de árvore para representar hierarquia partes-todo. Usado quando temos um contexto em que um objeto é construído a partir da composição de vários outros.
- Componente (Component): Abstração para todos os componentes. Interface para a composição.
- Folhas (Leaf): Implementa todos os métodos do Composite.
- Composite: Representa (implementa) um componente que tem filhos. Implementa métodos delegando ações.
Padrão Decorator
Evitar explosão de subclasses para realizar todas as combinações possíveis. Pode-se usar mais de um decorator para englobar um objeto. Usado quando há uma necessidade de alterar o comportamento ou estado de um objeto dinamicamente.
Padrões Comportamentais
Descrevem padrões de comunicação entre objetos, focando em:
- Fluxos de comunicação complexos.
- Interconexão entre objetos.
- Escopo de classe: herança.
- Escopo de objeto: composição.
Padrão Strategy
Definir um conjunto de classes para que possam ser alteradas em tempo de execução. Os objetos trabalham de forma independente para os possíveis clientes realizarem operações diferentes. É aplicado em situações em que muitas classes se relacionam e diferem apenas no modo de atuação.
Padrão Template Method
Evitar duplicidade de código através do isolamento do comportamento comum. Implementar partes invariantes de um algoritmo na superclasse e deixar o restante para as subclasses.
Padrão Observer
Define uma dependência um-para-muitos entre objetos de modo que, quando um objeto muda o estado, todos seus dependentes são notificados e atualizados automaticamente. O padrão Observer permite que objetos interessados sejam avisados da mudança de estado ou outros eventos ocorrendo num outro objeto.
Diferenças entre Go e Java
Em Go, diferente de Java, não é necessário implementar a interface na classe explicitamente; apenas utilizando os métodos que a interface possui, a classe já se torna do tipo da interface. No exemplo da questão, existe a interface com o método toString() e a classe Pessoa está utilizando-o. Então, quer dizer que a classe Pessoa "implementa" a interface Imprimível ou do seu tipo.