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.

Entradas relacionadas: