Buscar

Padrões de Projeto

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

OS PADRÕES DE PROJETO (DESIGN PATTERNS) 
O que é design patterns? São soluções para problemas conhecidos e recorrentes no desenvolvimento de softwares, essas soluções foram utilizadas e testadas no passado e continuam relevantes nos dias atuais.
Os padrões de projeto são como uma descrição de como lidar com esses problemas e projetar uma solução.
Design pattern também é conhecido como padrões GoF (Gang of Four).
ELEMENTOS
Um padrão tem quatro elementos essenciais:
O Nome do padrão: Descreve um problema de projeto.
O problema: Descreve em que situação aplicar o padrão.
A solução: Descreve os elementos que compõem o padrão de projeto. A solução não descreve um projeto concreto ou uma implementação em particular, porque um padrão é como um gabarito que pode ser aplicado em muitas situações diferentes. Em vez disso, o padrão fornece uma descrição abstrata de um problema de projeto e de como um arranjo geral de elementos (classes e objetos, no nosso caso) o resolve.
As consequências: são os resultados e análises das vantagens e desvantagens da aplicação do padrão.
Resumindo: 
· GoF tem 4 elementos básicos:
· Nome
· Problema
· Solução 
· Consequências
CATEGORIAS
Padrões GoF são divididos em 3 categorias:
· De criação (Creational)
· Estrutural (structural)
· Comportamentais (behavioural)
Padrões criacionais: São padrões que oferecem alternativas para criação de classes e objetos. 
Padrões estruturais: Mostram como aumentar a funcionalidade das classes envolvidas, sem alterar muito a sua composição.
Padrões comportamentais: esses padrões foram criados levando em conta a forma como uma classe se comunica com as outras. 
Os padrões dessa categoria atuam diretamente na delegação de responsabilidades, definindo como os objetos devem se comportar e se comunicar.
PADRÕES
Os padrões de cada categoria são os seguintes: 
ATENÇÃO: De classes - Factory Method, Adapter, Interpreter e Template method.
CRIACIONAL:
	Nome do padrão:
	FACTORY METHOD
	Problema: 
	
	Solução:
	Define uma interface para criar um objeto, permitindo que suas subclasses decidam qual classe instanciar. 
O Factory Method deixa a responsabilidade de instanciação para as subclasses.
	Consequências
	
	Nome do padrão:
	BUILDER
	Problema: 
	
	Solução:
	Provê uma interface genérica para a construção incremental de agregações. 
Um Builder esconde os detalhes de como os componentes são criados, representados e compostos.
	Consequências
	
	Nome do padrão:
	PROTOTYPE
	Problema: 
	
	Solução:
	Especifica os tipos de objetos a serem criados num sistema, usando uma instância de protótipo. Cria novos objetos copiando este protótipo.
	Consequências
	
	Nome do padrão:
	ABSTRACT FACTORY
	Problema: 
	Ter uma maneira de trocar objetos plugáveis de forma transparente.
	Solução:
	Fornecer uma interface abstrata que providencie métodos para instanciar os objetos. 
	Consequências
	Permite que você troque facilmente novos tipos de classe em seus sistemas; entretanto; é dispendioso adicionar tipos não relacionados.
	Nome do padrão:
	SINGLETON
	Problema: 
	Deve existir apenas uma instância de um objeto no sistema em determinado momento. 
	Solução:
	Assegura que uma classe tenha apenas uma instância e provê um ponto global de acesso a ela.
Permitir que o objeto gerencia sua própria criação e acesso através de um método de classe. 
	Consequências
	Acesso controlado à instância do objeto. Também pode dar acesso a um número definido de instâncias (como apenas seis instâncias), com uma ligeira alteração no padrão. É um pouco mais difícil herdar um singleton.
ESTRUTURAL:
	Nome do padrão:
	ADAPTER, Wrapper
	Problema: 
	Como reutilizar objetos incompatíveis
	Solução:
	Fornecer um objeto que converta a interface incompatível em uma compatível
	Consequências
	Tornar incompatíveis objetos compatíveis.
Pode resultar em classes extras.
	Nome do padrão:
	PROXY, surrogate
	Problema: 
	Quando precisa controlar o acesso a um objeto
	Solução:
	Fornecer um objeto que intermedie o acesso a outro objeto de forma transparente.
	Consequências
	Introduz um nível de procedimento indireto no uso do objeto.
	Nome do padrão:
	BRIDGE
	Problema: 
	
	Solução:
	Separa uma abstração de sua implementação, de modo que ambas possam variar independentemente.
	Consequências
	
	Nome do padrão:
	COMPOSITE
	Problema: 
	
	Solução:
	Compõe objetos em árvores de agregação (relacionamento parte-todo).
	Consequências
	O Composite permite que objetos agregados sejam tratados como um único objeto. 
	Nome do padrão:
	DECORATOR
	Problema: 
	
	Solução:
	Anexa responsabilidades adicionais a um objeto dinamicamente. Provê uma alternativa flexível para extensão de funcionalidade, sem ter que usar Herança.
	Consequências
	
	Nome do padrão:
	FACADE
	Problema: 
	
	Solução:
	Provê uma interface unificada para um conjunto de interfaces em um subsistema. O Facade define uma interface alto nível para facilitar o uso deste subsistema.
	Consequências
	
	Nome do padrão:
	FLYWEIGHT
	Problema: 
	Como reutilizar objetos incompatíveis
	Solução:
	Fornecer um objeto que converta a interface incompatível em uma compatível
	Consequências
	Tornar incompatíveis objetos compatíveis.
Pode resultar em classes extras.
COMPORTAMENTAL:
	Nome do padrão:
	ITERATOR, CURSOR
	Problema: 
	Fazer laço sobre uma coleção sem se tornar dependente da implementação da coleção.
	Solução:
	Fornecer um objeto que manipule os detalhes da iteração, ocultando assim os detalhes do usuário.
	Consequências
	Navegação desaclopada, interface da coleção mais simples, lógica de laço encapsulada.
	Nome do padrão:
	INTERPRETER
	Problema: 
	
	Solução:
	Usado para definição de linguagens. 
	Consequências
	.
	Nome do padrão:
	TEMPLATE METHOD
	Problema: 
	
	Solução:
	Define o esqueleto de um algoritmo em uma operação. 
	Consequências
	Permite que subclasses componham o algoritmo
	Nome do padrão:
	VISITOR
	Problema: 
	
	Solução:
	Representa uma operação a ser realizada sobre elementos da estrutura de um objeto. 
	Consequências
	O Visitor permite criar uma nova operação sem mudar a classe dos elementos sobre as quais ela opera
	Nome do padrão:
	STATE
	Problema: 
	
	Solução:
	Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto. 
	Consequências
	.
	Nome do padrão:
	STRATEGY
	Problema: 
	
	Solução:
	Define uma família de algoritmos, encapsula cada um deles, e torna a escolha de qual usar flexível.
	Consequências
	O Strategy desacopla os algoritmos dos clientes que os usa.
	Nome do padrão:
	MEDIATOR
	Problema: 
	
	Solução:
	Desacopla e gerencia as colaborações entre um grupo de objetos. 
	Consequências
	Define um objeto que encapsula as interações dentre desse grupo. 
	Nome do padrão:
	MEMENTO
	Problema: 
	
	Solução:
	Captura e externaliza o estado interno de um objeto (captura um "snapshot").
	Consequências
	O Memento não viola o encapsulamento. 
	Nome do padrão:
	OBSERVER
	Problema: 
	
	Solução:
	Provê sincronização, coordenação e consistência entre objetos relacionados.
	Consequências
	.
	Nome do padrão:
	CHAIN OF RESPONSABILITY
	Problema: 
	
	Solução:
	Encadeia os objetos receptores e transporta a mensagem através da corrente até que um dos objetos a responda.
	Consequências
	Assim, separa objetos transmissores dos receptores, dando a chance de mais de um objeto poder tratar a mensagem. 
	Nome do padrão:
	COMMAND
	Problema: 
	
	Solução:
	Encapsula uma mensagem como um objeto, de modo que se possa parametrizar clientes com diferentes mensagens.
	Consequências
	Separa, então, o criador da mensagem do executor da mesma.
OBSERVAÇÕES:
Abstract Factory:
· O Abstract Factory tem como objetivo remover código de criação (aquele com a palavra reservada new) de nossas classes de negócio.
· Abstract Factory trabalha com a criação de famílias de objetos.
Os relacionamentos com capacidade de conexão de herança, combinados com o polimorfismo, permitem que você conecte novos objetos emseu programa, a qualquer momento; entretanto, há um inconveniente.
Para o programa funcionar, é preciso entrar no código e alterá-lo para que ele instancie os novos objetos, em vez dos antigos, será preciso fazer isso em todos os lugares onde os objetos antigos são instanciados.
· O padrão abstract factory resolve esse problema através da delegação.
· Em vez de instanciar objetos através do seu programa, você pode delegar isso para um objeto chamado factory.
· Quando um objeto precisar criar outro, ele solicitará que o factory faça isso.
Quando usar:
· Quando você quiser ocultar o modo como um objeto é criado.
· Você quiser ocultar a classe atual do objeto criado.
· Quiser usar diferentes versões de uma implementação de classe.
ATENÇÃO: Essa categoria é importante pois ela sustenta o princípio mais importante do livro GoF: “programe para interfaces e não para implementações”.
ADAPTER: Converte a interface de uma classe em outra, esperada pelo cliente. Permite que classes que antes não poderiam trabalhar juntas, por incompatibilidade de interfaces, possam agora fazê-lo.
· Converte a interface de uma classe em outra
· Um adaptador é um objeto que transforma a interface de outro objeto.
Use adapter quando:
· Você precisar usar objetos incompatíveis em seu programa.
· Você quiser que seu programa permaneça independente de bibliotecas de terceiros.
Exemplo de uso:
O padrão Adapter é muito utilizado quando precisamos encaixar uma nova biblioteca de classes, adquirida de um fornecedor, em um sistema de software já existente, porém essas bibliotecas de classe do novo fornecedor são diferentes das bibliotecas de classes do fornecedor antigo. 
Como não temos o código do novo fornecedor e também não podemos alterá-la, o que pode ser feito é criar uma classe que faça essa adaptação, ou seja, ela é responsável por adaptar a interface do novo fornecedor ao formato que o sistema espera. 
O Adapter é muito utilizado para compatibilizar o seu sistema a outros frameworks ou APIs.
Portanto, o adaptador é um intermediador que recebe solicitações do cliente e converte essas solicitações num formato que o fornecedor entenda.
Proxy: Provê projeto para um controlador de acesso a um objeto.
· Um proxy é um substituto que intermedia o acesso ao objeto de interesse real.
· Para todos os efeitos, o substituto é indistinguível do objeto real que intermedia.
Quando usar?
Você quer proteger de forma transparente o modo como um objeto é usado.
RESUMO
Dicas de memorização
Padrões Criacionais
Dica:
· Uma fábrica (Factory Method) abstrata (Abstract Factory) constrói (Builder) um protótipo (Prototype) único (Singleton).
Padrões Estruturais
Dica:
· A ponte (Bridge) adaptada (Adapter) é composta (Composite) de decorações (Decorator) na fachada (Façade) para o peso mosca (Flyweight) se “aproxymar” (Proxy).
O que não for criacional ou estrutural, então é comportamental. 
https://www.thiengo.com.br/padrao-de-projeto-abstract-factory
Exemplo prático no link acima, da pizzaria.
image1.png
image2.png