Padroes_de_projetos

23 Padrões de Projetos de Software para resolver seus problemas

 

PADRÕES DE PROJETOS GoF

Olá, padrões de projeto ajudam o desenvolvedor a resolver problemas no meu caso criei uma colinha pra sempre que tiver um “problema” recorrer a ele para relembrar quem pode me ajudar. Segue abaixo:

O que são Padrões de Projetos?

São procedimentos/códigos que foram padronizados para resolver problemas que são comuns em vários projetos.

GoF = Gang of Four

Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides integrantes da “Gangue dos Quatro” (Gang of Four) publicaram em 1995 o livro Design Patterns: Elements of Reusable Object-Oriented Software.

 

Padrões Criacionais: Gerenciam a criação de instâncias de objetos. Todos os padrões fornecem alguma maneira de desconectar o cliente dos objetos a partir dos quais serão geradas instâncias;

  • Singleton
  • Abstract Factory
  • Builder
  • Prototype
  • Factory Method

 

Padrões Estruturais: permitem que você organize classes ou objetos em estruturas maiores;

  • Decorator
  • Proxy
  • FlyWeight
  • Facade
  • Composite
  • Bridge
  • Adapter

 

Padrões Comportamentais: preocupam-se com a forma como as classes e objetos interagem e com a distribuição de responsabilidades.

  • Template Method
  • Visitor
  • Command
  • Strategy
  • Chair of Responsability
  • Iterator
  • Mediator
  • Memento
  • Interpreter
  • State
  • Observer

Singleton

Objetivo:
Garante a existência de apenas uma instância de uma classe.

Quando usá-lo:
Quando você necessita de somente uma instância da classe.

Abstract Factory

Objetivo:
Permite que um cliente crie famílias de objetos sem especificar suas classes concretas reduzindo o acoplamento do projeto;

Quando usá-lo:
Quando possuímos vários produtos a serem criados.

Builder

Objetivo:
É usado para encapsular a lógica de construção de um objeto. Este padrão é frequentemente utilizado quando o processo de construção de um objeto é considerado complexo e também quando se trata da construção de representações múltiplas de uma mesma classe.

Quando usá-lo:
Separar a construção de um objeto complexo da sua representação de modo que o mesmo processo de construção possa criar diferentes representações.

Prototype

Objetivo:
Especificar tipos de objetos a serem criados usando uma instância protótipo e criar novos objetos pela cópia desse protótipo.

Quando usá-lo:
Use o padrão Prototype quando precisamos criar novos objetos a partir de uma instância protótipo, que vai realizar uma cópia de si mesmo e retornar para o novo objeto.

Factory Method

Objetivo:
Padrão de projeto de software que permite às classes delegar para subclasses decidirem.

Quando usá-lo:
Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar;
Quando uma classe quer que suas subclasses especifiquem os objetos criados;

Decorator

Objetivo:
Adicionar funcionalidade ao código sem alterar a funcionalidade da função. É usado como substituto da herança.

Quando usá-lo:
Quando precisamos especializar/generalizar sem modificar as classes existentes e com facilidade.

Proxy

Objetivo:
Fornecer um substituto ou marcador da localização de outro objeto para controlar o acesso a esse objeto.

Quando usá-lo:
Quando precisamos controlar o acesso a um objeto e redirecionar para onde deve ser redirecionado.

FlyWeight

Objetivo:
Criar uma instancia de uma classe para muitas “instancias virtuais”.

Quando usá-lo:
Para criar uma estrutura de compartilhamento de objetos pequenos em uma única classe.

Facade

Objetivo:
Ocultar toda a complexidade de uma ou mais classes através de uma fachada com intenção de simplificar uma interface tornando-a muito mais simples.

Quando usá-lo:
Esse padrão é utilizado quando precisamos simplificar e unificar uma interface grande ou um conjunto complexo de interfaces.

Composite

Objetivo:
Compor objetos em estruturas de árvore para representarem hierarquias parte-todo.

Quando usá-lo:
Quando queremos reutilizar método e funções de algum objeto e colocar em qualquer outro, sendo vários objetos ligados a um único.

Adapter

Objetivo:
Faz o intermédio entre classes ele envelopa um objeto e fornece a ele uma interface diferente.

Quando usá-lo:
Quando precisamos que classes com interfaces não compatíveis se comuniquem.

Bridge

Objetivo:

Cria uma interface (abstração) que possa variar independentemente das suas implementações.

Quando usá-lo:
Quando quiser evitar uma ligação permanente entre uma abstração e sua implementação;

State

Objetivo:
Elimina condicionais complexos e acaba se tornando um objeto, assim você pode tratar cada estado como se fosse um objeto de verdade, distribuindo a complexidade dos condicionais.

Quando usá-lo:
Quando precisamos tratar estados no projeto.

Observer

Objetivo:
Definir 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.

Quando usá-lo:
Quando uma mudança em um objeto exige mudanças em outros, e você não sabe quantos objetos necessitam ser mudados.

Strategy

Objetivo:
Encapsula comportamentos e decidi qual deles será usado de acordo com o valor passado, o objetivo é centralizar uma estratégia;

Quando usá-lo:
Quando existe uma complexa estrutura condicional, uma classe define muitos comportamentos e por sua vez eles aparecem como diversos “IFs”. Com isso esses comandos condicionais são movidos para sua própria classe Strategy;

Visitor

Objetivo:
Visitor permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera;

Quando usá-lo:
Quando existe a necessidade de acrescentar um novo método na classe concreta sem que seja possível/desejável a modificação dessa classe;

Command

Objetivo:
Encapsula uma solicitação como um objeto;

Quando usá-lo:
Quando desejar parametrizar objetos por uma ação a ser executada. Quando se tem a necessidade de criar um objeto para cada “comando”;

Memento

Objetivo:
Para gravar o estado interno de um objeto sem violar encapsulamento e recuperar depois sem conhecer o objeto original.

Quando usá-lo:
Quando desejar armazenar estados de um objeto para retornar a um estado anterior quando necessário; Quando queremos criar um “Desfazer”;

Mediator

Objetivo:
Centralizar operações complexas de comunicação e controle entre objetos relacionados;

Quando usá-lo:
Quando houver necessidade de simplificar a comunicação entre vários objetos.

Interpreter

Objetivo:
Construir um intérprete para uma linguagem; Considerando como linguagem toda operação passível de tradução;

Quando usá-lo:
Quando há necessidade de uma tradução de valores dentro da aplicação.

Iterator

Objetivo:
Proporcional controles para o uso de listas;

Quando usá-lo:
Quando necessita criar uma lista, usa-se o padrão iterator para controlar as operações/objetos dessa lista.

Chain of Responsability

Objetivo:
Dar a mais de um objeto a oportunidade de processar uma solicitação;

Quando usá-lo:
Quando desejamos acabar com as estruturas de decisão, para isso cria-se uma cadeia de objetos e vai passando a responsabilidade entre eles até que alguém possa responder pela chamada.

Conclusão

São eles os 23 padrões de projetos de software que ajudam a desenvolver com qualidade os meus projetos e de muitos programadores.

O objetivo dessa lista é ser o mais simples possível para ajudar no dia-a-dia, aproveite você também;

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *