SlideShare una empresa de Scribd logo
1 de 66
Pattern - Definição
O que é um Padrão (Pattern) ?
• Define padrão como uma solução permanente para um
problema em um contexto. Contexto é o ambiente ,
circunstancias, situação ou condições interdependentes dentro
do qual algo existe.
O que é uma Estratégia ?
- Os padrões são descritos em um nível alto de Abstração. Ao mesmo
tempo cada padrão inclui várias estratégias que fornecem detalhes de
implementação em diversos níveis de abstração.
GOF
- Os padrões GoF (Gamma et al., 1994) formam um catálogo de boas
- decisões de projeto.
Classificação dos Patterns
•Padrões de Criação (Creational)
• Abstract Factory, Builder, Factory Method, Prototype, Singleton.
•Padrões de Estrutura (Structural)
• Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
•Padrões de Comportamento(Behavioral)
• Chain of Responsability, Command, Interpreter, Iterator, Mediator,
Memento, Observer, State, Strategy, Template Method, Visitor.
GOF
Propósito
Criação Estrutura Comportamento
Escopo
Classe Factory Method Class Adapter
Interpreter
Template Method
Objeto
Abstract Factory Object Adapter Chain of Responsibility
Builder Bridge Command
Prototype Composite Iterator
Singleton Decorator Mediator
Factory Method Facade Memento
Flyweight Observer
Proxy State
Strategy
Visitor
Classificando os Patterns
Classificando os Patterns
GoF segundo Metsker
Intenção Padrões
Interfaces Adapter, Facede,Composite, Bridge
Responsabilidade Singleton, Observer, Mediator, Proxy, Chain
of Repository, Flyweitght
Construção Builder, Factory Method, Abstract Factory,
Prototype, Memento
Operações Template Method, State, Strategy,
Command, Interpreter
Extensões Decorator, Iterator, Visitor
Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Definir uma interface para criar famílias de
objetos relacionados ou dependentes sem especificar suas classes
concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
Pattern Singleton
• Intenção: Você deseja ter somente um objeto de uma classe, mas não existe
nenhum objeto global que controle a instanciação deste objeto
• Problema: Vários objetos Clientes deferentes precisam se referir ao mesmo
objeto e você deseja assegurar que não terá mais de um deles.
• Solução: Garantir a existência de uma única instância para este objeto.
• Participantes: Clientes que criam uma instancia da classe Singleton tão-
somente por meio de um método getInstance().
Pattern Singleton
1.public class SingletonImplementation {
2.
3. private static SingletonImplementation instance;
4.
5. /**
6. * Creates a new SingletonImplementation object.
7. */
8. private SingletonImplementation () {
9. // initialize all attributes.
10. }
11.
12. /**
13. * Retrieves Singleton Instance for SingletonImplementation
14. * @return SingletonImplementation singletonImplementation
15. */
16. public synchronized static SingletonImplementation
getInstance() {
17. if (instance == null) {
18. instance = new SingletonImplementation ();
19. }
20. return instance ;
21. }
22. }
Singleton - Exemplo
• class Singleton{
private static Singleton instance;
private Singleton(){}
•
public static Singleton getInstance(){
if( instance == null ){
instance = new Singleton();
}
return instance;
}
}
Diagrama
• O Cliente nunca terá acesso ao construtor da classe Singleton,
somente ao método getInstance que garantirá uma única
instancia desta classe.
• Exemplo de um método cliente de Singleton.
1. SingletonImplementation singleton =
2.
SingletonImplementation.getInstance();
Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
Factory Method
• Intenção : Definir uma interface para criar um objeto, deixando,
porem que as subclasses decidam qual classe instanciar. Delegar a
instanciação para as subclasses.
• Problema: Uma classe precisa de instanciar uma derivação de uma
outra mas não sabe qual. O FactoryMethod permite que uma classe
derivada tome esta decisão.
• Solução: Uma classe derivada decide qual classe instanciar e o
modo como instanciá-la.
• Participantes: Produto é a interface para o tipo de objeto que o
Factory Method cria. Gerador é a interface que decide o
FactoryMethod.
Factory Method
É uma interface para instanciação de objetos que
mantém isoladas as classes concretas usadas da
requisição da criação destes objetos.
• Separa assim:
• Uma “família” de classes dotadas da mesma interface
(“produtos”); e
• Uma classe (“fábrica”) que possui um método especial
(o factory method) que cria tais objetos.
Pattern Factory Method
class Test{
public static void
main(String a[] ){
Creator c ;
// If A is needed
c = new ConcreteCreatorA() ;
// else
c = new
ConcreteCreatorB() ;
Product p = c.create() ;
}
}
• abstract class Product{
...
}
class ConcreteProductA extends Product{
...
}
class ConcreteProductB extends Product{
...
}
• --------------------
• abstract class Creator{
public abstract Product create();
}
class ConcreteCreatorA extends Creator{
public Product create(){
return new ConcreteProductA() ;
}
}
class ConcreteCreatorB extends Creator{
public Product create(){
return new ConcreteProductB() ;
}
}
EXEMPLO
Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
Pattern Builder
"Separar a construção de um objeto complexo de
sua representação para que o mesmo processo
de construção possa criar representações
diferentes.”
Problema
• O cliente precisa criar um objeto, porém, o
processo de criação é complexo e pode variar.
Pattern Builder
Solução
• Separar a construção de sua representação assim como
a construção possa criar diferentes representações.
• Exemplo:
Cliente
Pattern Builder
Cliente Funcionário
(Diretor)
Equipe Rest.
(Builder)
Faz o pedido
Pega o pedido
build
build
build
build
Pega o pedido
Pattern Builder
Pattern Builder
Quando Usar ?
• Use quando o algoritmo para criar um objeto complexo
precisar ser independente das partes que compõem o objeto
e da forma como o objeto é construído.
• Use quando o processo de construção precisar suportar
representações diferentes do objeto que está sendo
construído
Patterns de Criação
• Singleton: Garantir que uma classe só tenha uma única instância, e
prover um ponto de acesso global a ela.
• Factory Method: Definir uma interface para criar um objeto mas
deixar que subclasses decidam que classe instanciar.
• Abstract Factory : Prover interface para criar famílias de objetos
relacionados ou dependentes sem especificar suas classes concretas
• Builder : Separar a construção de objeto complexo da
representação para criar representações diferentes com mesmo
processo.
• Prototype : Especificar tipos a criar usando uma instância como
protótipo e criar novos objetos ao copiar este protótipo.
Pattern PrototypePattern Prototype
"Especificar os tipos de objetos a serem criados usando uma
instância como protótipo e criar novos objetos ao copiar este
protótipo.” [ GoF ]
• O padrão Prototype permite que um cliente crie novos
objetos ao copiar objetos existentes.
• Uma vantagem de criar objetos deste modo é poder
aproveitar o estado existente de um objeto.
Prototype
Problema
• Criar um objeto novo, mas aproveitar o estado previamente
existente em outro objeto
Prototype
Prototype
• O Pattern Prototype é implementado da Interface Cloneable.
Circulo c = new Circulo(4, 5, 6);
Circulo copia = (Circulo) c.clone();
• Se o objeto apenas contiver tipos primitivos em seus campos de dados, é preciso
• declarar que a classe implementa Cloneable
• sobrepor clone() da seguinte forma:
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
Prototype – Exemplo
• Se o objeto contiver campos de dados que são
referências a objetos, é preciso fazer cópias
desses objetos também.
1. public class Circulo implements Cloneable {
2. private Ponto origem;
3. private double raio;
4. public Object clone() {
5. try {
6. Circulo c = (Circulo)super.clone();
7. c.origem = origem.clone(); //Ponto deve ser
clonável!
8. return c;
9. } catch(CloneNotSupportedException e) {
10. return null;
11. }
12. }
13.}
Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
Pattern Adapter
• Intenção: Casar um objeto existente, fora de seu
controle, com uma interface particular.
• Problema: Um Sistema possui dados e comportamento
correto mas interface inadequada. Ele é tipicamente
usado quando você tem que fazer algo derivar de sua
classe abstrata que estamos definindo ou que já esta
definida.
• Solução: O Adapter fornece um empacotador com a
interface desejada.
• Participantes: A classe Adapter ajusta a interface de uma
classe Adaptada para casar com a classe Alvo derivada
de Adapter. Isso possibilita ao cliente usar a classe
Adaptada como se fosse um tipo de Alvo.
Pattern Adapter
• Converter a interface de uma classe em outra interface esperada pelos clientes. Adapter
permite a comunicação entre classes que não poderiam trabalhar juntas devido à
incompatibilidade de suas interfaces.“ [ GoF ]
Pattern Adapter
• O Pattern Adapter é dividido em:
• Object Adapter: pattern demonstrado anteriormente , uma vez
que se baseia em um objeto (objeto adaptador) contendo um
outro (objeto adaptado).
• Class Adapter: Uma maneira de implementar o padrão através
de herança múltipla.
Pattern Adapter – Class
Adapterpublic interface ITarget {
public void operation();
}
public class Adaptee {
public Adaptee() {
}
public void adaptedOperation () {
//executa alguma operação
}
}
public class Adapter extends Adaptee
implements
ITarget {
public Adapter() {
super();
}
public void operation() {
super.adaptedOperation();
}
}
public class Client {
private ITarget iTarget;
public Client() {
// Poderia ser uma fabrica.
iTarget = new Adapter();
}
// getter e setters..
public static void main (String[]
args) {
Client client = new
Client ();
client.getITarget().operation();
}
}
Pattern Adapter
• Quando Usar ?
• Sempre que for necessário adaptar uma interface para
um cliente
• Class Adapter
• Quando houver uma interface que permita a
implementação estática
• Object Adapter
• Quando menor acoplamento for desejado
• Quando o cliente não usa uma interface Java ou classe
abstrata que possa ser estendida
Patterns Estruturais• Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um
subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira
uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar
independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos
complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
Pattern Façade
"Oferecer uma interface única para um conjunto
de interfaces de um subsistema. Façade define
uma interface de nível mais elevado que torna o
subsistema mais fácil de usar.”
[
GoF ]
Pattern Façade
• Intenção: Você deseja simplificar o uso de um sistema
existente. Precisa definir sua própria interface.
• Problema: Você deseja utilizar somente um subconjunto
de um sistema complexo. Ou interagir com o sistema de
uma maneira particular
• Solução: O Façade Apresenta uma nova interface para o
cliente usar o sistema existente
• Participantes: Ele apresenta uma interface especifica
para o cliente o que torna o sistema mais fácil de ser
utilizado.
Pattern Façade
Problema
• Para fazer o subsistema funcionar,
há diversos controles a
serem acionados.
Pattern Façade
Porém, uma camada intermediária pode delegar
as requisições as respectivas funções...
Pattern Façade
Pattern Façade
• Façades podem oferecer maior ou menor isolamento entre aplicação cliente e
objetos.
• Nível ideal deve ser determinado pelo nível de acoplamento desejado entre os
sistemas.
• A Façades mostrada como exemplo isola totalmente o cliente dos objetos
• Quando usar?
• Sempre que for desejável criar uma interface para um conjunto de objetos com
o objetivo de facilitar o uso da aplicação
• Permite que objetos individuais cuidem de uma única tarefa, deixando que a fachada
se encarregue de divulgar as suas operações.
Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
Pattern Composite
"Compor objetos em estruturas de árvore para representar
hierarquias todo-parte. Composite permite que clientes
tratem objetos individuais e composições de objetos de
maneira uniforme.” [ GoF ]
Pattern Composite
São comuns as situações onde temos que lidar com uma estrutura de
elementos agrupada hierarquicamente (não como meras coleções).
• Composições podem cumprir com este requisito e ainda
permitir:
• o tratamento da composição como um todo;
• ignorar as diferenças entre composições e elementos individuais;
• adição transparente de novos tipos a hierarquia;
• simplificação do cliente.
Pattern Composite - Problema
• Cliente precisa tratar de
maneira uniforme objetos
individuais e composições
de objetos
Pattern Composite – Diagrama de Classe
• Tratar grupos e
indivíduos diferentes
através de uma única
interface
Pattern Composite
Componente.java
public abstract class Componente {
private String pn;
public String getPn() {
return pn;
}
public void setPn(String pn) {
this.pn = pn;
}
public Componente(String pn) {
setPn(pn);
}
public abstract void operacao();
public abstract void add(Componente
comp);
public abstract Componente remove(int
index);
public abstract Componente
getFilho(int index);
public abstract int
getComponenteCount();
}
Composite.java
public class Composite extends Componente {
private ArrayList<Componente> componenteList;
public Composite(String pn) {
super(pn);
componenteList = new ArrayList<Componente>();
}
public void operacao() {
System.out.println("PN "+ getPn() +
" composto por: ");
for(int i = 0; i < getComponenteCount(); i++) {
getFilho(i).operacao();
}
}
public void add(Componente comp) {
componenteList.add(comp);
}
public Componente remove(int index) {
return componenteList.remove(index);
}
public Componente getFilho(int index){
return componenteList.get(index);
}
public int getComponenteCount() {
return componenteList.size();
}
}
Pattern Composite
Folha.java
public class Folha extends
Componente {
public Folha(String pn) {
super(pn);
}
public void operacao() {
System.out.println(getPn());
}
public void add(Componente comp){
}
public Componente remove(int
index){
return null;
}
public Componente getFilho(int
index){
return null;
}
public int getComponenteCount() {
return -1;
}
}
Cliente.java
public class Cliente {
public static void main(String[]
args) {
Folha a1 = new Folha("A1");
Folha a2 = new Folha("A2");
Folha a3 = new Folha("A3");
Composite c1 = new
Composite("C1");
c1.add(a1);
c1.add(a2);
Composite c2 = new
Composite("C2");
c2.add(a3);
Composite c3 = new
Composite("C3");
c3.add(c1);
c3.add(c2);
c3.operacao();
}
}
Pattern Composite – Quando Usar ?
• Sempre que houver necessidade de tratar um
conjunto como um indivíduo
• Há várias estratégias de implementação
Patterns Estruturais
• Adapter: Converter a interface de uma classe em outra interface esperada pelos
clientes.
• Façade: Oferecer uma interface única de nível mais elevado para um conjunto de
interfaces de um subsistema.
• Composite: Permitir o tratamento de objetos individuais e composições desses
objetos de maneira uniforme.
• Bridge: Desacoplar uma abstração de sua implementação para que os dois possam
variar independentemente.
• Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o
acesso a outro.
• Flyweight: Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos complexos.
• Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
Pattern Proxy – Problema
• Sistema quer utilizar um determinado objeto...
• Mas ele não está disponível (remoto, inaccessível, etc)
• Solução: arranjar um intermediário que saiba se comunicar com ele
eficientemente
Pattern Proxy – Diagrama
Objeto Desejado
Pattern Proxy - Estrutura
• Cliente usa intermediário em vez de sujeito real
• Intermediário suporta a mesma interface que
sujeito real
• Intermediário contém uma referência para o
sujeito real e repassa chamadas, possivelmente,
acrescentando informações ou filtrando dados
no processo.
Pattern Proxy
public class Creso {
...
Sujeito deusApolo = Fabrica.getSujeito();
deusApolo.operacao();
...
}
public class DeusApolo implements Sujeito {
public Object operacao() {
return coisaUtil;
}
}
public class Oraculo implements Sujeito {
private DeusApolo real;
public Object operacao() {
cobraTaxa();
return real.operacao();
}
}
public interface Sujeito {
public Object operacao();
}
Inacessível ao Cliente
Cliente comunica-se com Objeto
através dessa classe
Pattern Proxy – Quando
Usar ?
• A aplicação mais comum é em objetos distribuídos
• Vantagens
• Transparência: mesma sintaxe usada na comunicação entre o
cliente e sujeito real é usada no proxy
• Permite o tratamento inteligente dos dados no cliente
• Desvantagens
• Possível impacto na performance
• Transparência nem sempre é 100% (fatores externos como
queda da rede podem tornar o proxy inoperante ou
desatualizado
Patterns Comportamentais
•Chain of responsibility: enviar uma requisição para vários objetos sem
especificar o destinatário explicitamente.
•Command: requisição como objeto, para clientes parametrizarem
diferentes requisições, filas, e suportar operações reversíveis.
•Mediator: Definir um objeto que encapsula a forma como um conjunto de
objetos interagem.
•Memento: Externalizar o estado interno de um objeto para que o objeto
possa ter esse estado restaurado posteriormente.
•State: Permitir a um objeto alterar o seu comportamento quanto o seu
estado interno mudar.
•Strategy: Definir uma família de algoritmos, encapsular cada um, e fazê-los
intercambiáveis.
Behavioral
Chain of responsibility (cadeia de responsabilidade)
Intenção:
• Uma maneira de passar um pedido entre uma cadeia de objetos
Observações:
• O objeto que trata a solicitação deve ser escolhido automaticamente;
• Deve-se emitir uma solicitação para um dentre vários objetos,
• O conjunto de objetos que pode tratar uma solicitação deveria ser
especificado dinamicamente.
Exemplo
Behavioral
Command (Comando)
Intenção:
•encapsular uma solicitação de comando como um objeto.
Observações:
•Parametrizar objetos por uma ação a ser executada.
•Especificar, enfileirar e executar solicitações em tempos diferentes.
•Especificar, enfileirar e executar solicitações em tempos diferentes.
Uml
Behavioral
Mediator (Mediador)
Intenção:
•Define comunicação simplificada entre classes;
Observações:
•Mediator pode alavancar Observer para registrar dinamicamente
colegas e se comunicar com eles.
•Ele permite a unificação da interface de um sistema
Behavioral
Memento
Intenção:
•Sem violar o encapsulamento, captura e externaliza o estado
interno de um objeto para que o objeto pode ser devolvido a este
estado mais tarde.
Observações:
•Memento é muitas vezes utilizado em conjunto com Iterator.
•Pode usar Memento para manter o estado necessário para uma
operação de desfazer.
Uml
Behavioral
State (Estado)
Intenção:
• Permite que um objeto altere seu comportamento quando seu estado
interno muda. O objeto aparecerá para mudar sua classe.
Observações:
• Facilita a expansão de estados.
• Facilita a localizar as responsabilidades de estados específicos,
• Os objetos Estado podem ser compartilhados se eles não contêm
variáveis de instância​​
Uml
Behavioral
Strategy (Estratégia)
Intenção;
•Encapsula um algoritmo dentro de uma classe
Observações:
•Strategy permite definir novas operações sem alterar as classes dos
elementos sobre os quais opera.
•Definir uma família de algoritmos e encapsular cada algoritmo como
uma classe.
Uml
FIM

Más contenido relacionado

La actualidad más candente

Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade IIJoão Lourenço
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 

La actualidad más candente (15)

Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Testes de Unidade - Unidade II
Testes de Unidade - Unidade IITestes de Unidade - Unidade II
Testes de Unidade - Unidade II
 
Patterns: Factory Method
Patterns: Factory MethodPatterns: Factory Method
Patterns: Factory Method
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
v
vv
v
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 

Destacado

Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6ariovaldodias
 
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?tdc-globalcode
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Praticaelliando dias
 
Como escolher um framework web
Como escolher um framework webComo escolher um framework web
Como escolher um framework webRafael Carneiro
 
Sete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoSete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoPlaneta Código
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 

Destacado (12)

4
44
4
 
Framework
FrameworkFramework
Framework
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6
 
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?
TDC 2013 SP | Arquitetura Java: Preciso de um Framework, mas qual usar?
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Pratica
 
Black sabbath
Black sabbathBlack sabbath
Black sabbath
 
Como escolher um framework web
Como escolher um framework webComo escolher um framework web
Como escolher um framework web
 
Sete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De SucessoSete Passos Para Um Programador De Sucesso
Sete Passos Para Um Programador De Sucesso
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 

Similar a Patterns (20)

Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Java7
Java7Java7
Java7
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
padrao de projeto0
padrao de projeto0padrao de projeto0
padrao de projeto0
 
java_avancado.pdf
java_avancado.pdfjava_avancado.pdf
java_avancado.pdf
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Factory apresentacao
Factory   apresentacaoFactory   apresentacao
Factory apresentacao
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
Quick reference
Quick referenceQuick reference
Quick reference
 
padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 

Patterns

  • 1. Pattern - Definição O que é um Padrão (Pattern) ? • Define padrão como uma solução permanente para um problema em um contexto. Contexto é o ambiente , circunstancias, situação ou condições interdependentes dentro do qual algo existe. O que é uma Estratégia ? - Os padrões são descritos em um nível alto de Abstração. Ao mesmo tempo cada padrão inclui várias estratégias que fornecem detalhes de implementação em diversos níveis de abstração. GOF - Os padrões GoF (Gamma et al., 1994) formam um catálogo de boas - decisões de projeto.
  • 2. Classificação dos Patterns •Padrões de Criação (Creational) • Abstract Factory, Builder, Factory Method, Prototype, Singleton. •Padrões de Estrutura (Structural) • Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy. •Padrões de Comportamento(Behavioral) • Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.
  • 3. GOF Propósito Criação Estrutura Comportamento Escopo Classe Factory Method Class Adapter Interpreter Template Method Objeto Abstract Factory Object Adapter Chain of Responsibility Builder Bridge Command Prototype Composite Iterator Singleton Decorator Mediator Factory Method Facade Memento Flyweight Observer Proxy State Strategy Visitor Classificando os Patterns
  • 4. Classificando os Patterns GoF segundo Metsker Intenção Padrões Interfaces Adapter, Facede,Composite, Bridge Responsabilidade Singleton, Observer, Mediator, Proxy, Chain of Repository, Flyweitght Construção Builder, Factory Method, Abstract Factory, Prototype, Memento Operações Template Method, State, Strategy, Command, Interpreter Extensões Decorator, Iterator, Visitor
  • 5. Patterns de Criação • Singleton: Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. • Factory Method: Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. • Abstract Factory : Definir uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas • Builder : Separar a construção de objeto complexo da representação para criar representações diferentes com mesmo processo. • Prototype : Especificar tipos a criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo.
  • 6. Pattern Singleton • Intenção: Você deseja ter somente um objeto de uma classe, mas não existe nenhum objeto global que controle a instanciação deste objeto • Problema: Vários objetos Clientes deferentes precisam se referir ao mesmo objeto e você deseja assegurar que não terá mais de um deles. • Solução: Garantir a existência de uma única instância para este objeto. • Participantes: Clientes que criam uma instancia da classe Singleton tão- somente por meio de um método getInstance().
  • 7. Pattern Singleton 1.public class SingletonImplementation { 2. 3. private static SingletonImplementation instance; 4. 5. /** 6. * Creates a new SingletonImplementation object. 7. */ 8. private SingletonImplementation () { 9. // initialize all attributes. 10. } 11. 12. /** 13. * Retrieves Singleton Instance for SingletonImplementation 14. * @return SingletonImplementation singletonImplementation 15. */ 16. public synchronized static SingletonImplementation getInstance() { 17. if (instance == null) { 18. instance = new SingletonImplementation (); 19. } 20. return instance ; 21. } 22. }
  • 8. Singleton - Exemplo • class Singleton{ private static Singleton instance; private Singleton(){} • public static Singleton getInstance(){ if( instance == null ){ instance = new Singleton(); } return instance; } }
  • 9. Diagrama • O Cliente nunca terá acesso ao construtor da classe Singleton, somente ao método getInstance que garantirá uma única instancia desta classe. • Exemplo de um método cliente de Singleton. 1. SingletonImplementation singleton = 2. SingletonImplementation.getInstance();
  • 10. Patterns de Criação • Singleton: Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. • Factory Method: Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. • Abstract Factory : Prover interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas • Builder : Separar a construção de objeto complexo da representação para criar representações diferentes com mesmo processo. • Prototype : Especificar tipos a criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo.
  • 11. Factory Method • Intenção : Definir uma interface para criar um objeto, deixando, porem que as subclasses decidam qual classe instanciar. Delegar a instanciação para as subclasses. • Problema: Uma classe precisa de instanciar uma derivação de uma outra mas não sabe qual. O FactoryMethod permite que uma classe derivada tome esta decisão. • Solução: Uma classe derivada decide qual classe instanciar e o modo como instanciá-la. • Participantes: Produto é a interface para o tipo de objeto que o Factory Method cria. Gerador é a interface que decide o FactoryMethod.
  • 12. Factory Method É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos. • Separa assim: • Uma “família” de classes dotadas da mesma interface (“produtos”); e • Uma classe (“fábrica”) que possui um método especial (o factory method) que cria tais objetos.
  • 14. class Test{ public static void main(String a[] ){ Creator c ; // If A is needed c = new ConcreteCreatorA() ; // else c = new ConcreteCreatorB() ; Product p = c.create() ; } } • abstract class Product{ ... } class ConcreteProductA extends Product{ ... } class ConcreteProductB extends Product{ ... } • -------------------- • abstract class Creator{ public abstract Product create(); } class ConcreteCreatorA extends Creator{ public Product create(){ return new ConcreteProductA() ; } } class ConcreteCreatorB extends Creator{ public Product create(){ return new ConcreteProductB() ; } } EXEMPLO
  • 15. Patterns de Criação • Singleton: Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. • Factory Method: Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. • Abstract Factory : Prover interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas • Builder : Separar a construção de objeto complexo da representação para criar representações diferentes com mesmo processo. • Prototype : Especificar tipos a criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo.
  • 16. Pattern Builder "Separar a construção de um objeto complexo de sua representação para que o mesmo processo de construção possa criar representações diferentes.” Problema • O cliente precisa criar um objeto, porém, o processo de criação é complexo e pode variar.
  • 17. Pattern Builder Solução • Separar a construção de sua representação assim como a construção possa criar diferentes representações. • Exemplo: Cliente
  • 18. Pattern Builder Cliente Funcionário (Diretor) Equipe Rest. (Builder) Faz o pedido Pega o pedido build build build build Pega o pedido
  • 20. Pattern Builder Quando Usar ? • Use quando o algoritmo para criar um objeto complexo precisar ser independente das partes que compõem o objeto e da forma como o objeto é construído. • Use quando o processo de construção precisar suportar representações diferentes do objeto que está sendo construído
  • 21. Patterns de Criação • Singleton: Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. • Factory Method: Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. • Abstract Factory : Prover interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas • Builder : Separar a construção de objeto complexo da representação para criar representações diferentes com mesmo processo. • Prototype : Especificar tipos a criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo.
  • 22. Pattern PrototypePattern Prototype "Especificar os tipos de objetos a serem criados usando uma instância como protótipo e criar novos objetos ao copiar este protótipo.” [ GoF ] • O padrão Prototype permite que um cliente crie novos objetos ao copiar objetos existentes. • Uma vantagem de criar objetos deste modo é poder aproveitar o estado existente de um objeto.
  • 23. Prototype Problema • Criar um objeto novo, mas aproveitar o estado previamente existente em outro objeto
  • 25. Prototype • O Pattern Prototype é implementado da Interface Cloneable. Circulo c = new Circulo(4, 5, 6); Circulo copia = (Circulo) c.clone(); • Se o objeto apenas contiver tipos primitivos em seus campos de dados, é preciso • declarar que a classe implementa Cloneable • sobrepor clone() da seguinte forma: public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { return null; } }
  • 26. Prototype – Exemplo • Se o objeto contiver campos de dados que são referências a objetos, é preciso fazer cópias desses objetos também. 1. public class Circulo implements Cloneable { 2. private Ponto origem; 3. private double raio; 4. public Object clone() { 5. try { 6. Circulo c = (Circulo)super.clone(); 7. c.origem = origem.clone(); //Ponto deve ser clonável! 8. return c; 9. } catch(CloneNotSupportedException e) { 10. return null; 11. } 12. } 13.}
  • 27. Patterns Estruturais • Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes. • Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. • Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira uniforme. • Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar independentemente. • Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. • Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos complexos. • Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
  • 28. Pattern Adapter • Intenção: Casar um objeto existente, fora de seu controle, com uma interface particular. • Problema: Um Sistema possui dados e comportamento correto mas interface inadequada. Ele é tipicamente usado quando você tem que fazer algo derivar de sua classe abstrata que estamos definindo ou que já esta definida. • Solução: O Adapter fornece um empacotador com a interface desejada. • Participantes: A classe Adapter ajusta a interface de uma classe Adaptada para casar com a classe Alvo derivada de Adapter. Isso possibilita ao cliente usar a classe Adaptada como se fosse um tipo de Alvo.
  • 29. Pattern Adapter • Converter a interface de uma classe em outra interface esperada pelos clientes. Adapter permite a comunicação entre classes que não poderiam trabalhar juntas devido à incompatibilidade de suas interfaces.“ [ GoF ]
  • 30. Pattern Adapter • O Pattern Adapter é dividido em: • Object Adapter: pattern demonstrado anteriormente , uma vez que se baseia em um objeto (objeto adaptador) contendo um outro (objeto adaptado). • Class Adapter: Uma maneira de implementar o padrão através de herança múltipla.
  • 31. Pattern Adapter – Class Adapterpublic interface ITarget { public void operation(); } public class Adaptee { public Adaptee() { } public void adaptedOperation () { //executa alguma operação } } public class Adapter extends Adaptee implements ITarget { public Adapter() { super(); } public void operation() { super.adaptedOperation(); } } public class Client { private ITarget iTarget; public Client() { // Poderia ser uma fabrica. iTarget = new Adapter(); } // getter e setters.. public static void main (String[] args) { Client client = new Client (); client.getITarget().operation(); } }
  • 32. Pattern Adapter • Quando Usar ? • Sempre que for necessário adaptar uma interface para um cliente • Class Adapter • Quando houver uma interface que permita a implementação estática • Object Adapter • Quando menor acoplamento for desejado • Quando o cliente não usa uma interface Java ou classe abstrata que possa ser estendida
  • 33. Patterns Estruturais• Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes. • Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. • Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira uniforme. • Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar independentemente. • Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. • Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos complexos. • Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
  • 34. Pattern Façade "Oferecer uma interface única para um conjunto de interfaces de um subsistema. Façade define uma interface de nível mais elevado que torna o subsistema mais fácil de usar.” [ GoF ]
  • 35. Pattern Façade • Intenção: Você deseja simplificar o uso de um sistema existente. Precisa definir sua própria interface. • Problema: Você deseja utilizar somente um subconjunto de um sistema complexo. Ou interagir com o sistema de uma maneira particular • Solução: O Façade Apresenta uma nova interface para o cliente usar o sistema existente • Participantes: Ele apresenta uma interface especifica para o cliente o que torna o sistema mais fácil de ser utilizado.
  • 36. Pattern Façade Problema • Para fazer o subsistema funcionar, há diversos controles a serem acionados.
  • 37. Pattern Façade Porém, uma camada intermediária pode delegar as requisições as respectivas funções...
  • 39. Pattern Façade • Façades podem oferecer maior ou menor isolamento entre aplicação cliente e objetos. • Nível ideal deve ser determinado pelo nível de acoplamento desejado entre os sistemas. • A Façades mostrada como exemplo isola totalmente o cliente dos objetos • Quando usar? • Sempre que for desejável criar uma interface para um conjunto de objetos com o objetivo de facilitar o uso da aplicação • Permite que objetos individuais cuidem de uma única tarefa, deixando que a fachada se encarregue de divulgar as suas operações.
  • 40. Patterns Estruturais • Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes. • Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. • Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira uniforme. • Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar independentemente. • Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. • Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos complexos. • Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
  • 41. Pattern Composite "Compor objetos em estruturas de árvore para representar hierarquias todo-parte. Composite permite que clientes tratem objetos individuais e composições de objetos de maneira uniforme.” [ GoF ]
  • 42. Pattern Composite São comuns as situações onde temos que lidar com uma estrutura de elementos agrupada hierarquicamente (não como meras coleções). • Composições podem cumprir com este requisito e ainda permitir: • o tratamento da composição como um todo; • ignorar as diferenças entre composições e elementos individuais; • adição transparente de novos tipos a hierarquia; • simplificação do cliente.
  • 43. Pattern Composite - Problema • Cliente precisa tratar de maneira uniforme objetos individuais e composições de objetos
  • 44. Pattern Composite – Diagrama de Classe • Tratar grupos e indivíduos diferentes através de uma única interface
  • 45. Pattern Composite Componente.java public abstract class Componente { private String pn; public String getPn() { return pn; } public void setPn(String pn) { this.pn = pn; } public Componente(String pn) { setPn(pn); } public abstract void operacao(); public abstract void add(Componente comp); public abstract Componente remove(int index); public abstract Componente getFilho(int index); public abstract int getComponenteCount(); } Composite.java public class Composite extends Componente { private ArrayList<Componente> componenteList; public Composite(String pn) { super(pn); componenteList = new ArrayList<Componente>(); } public void operacao() { System.out.println("PN "+ getPn() + " composto por: "); for(int i = 0; i < getComponenteCount(); i++) { getFilho(i).operacao(); } } public void add(Componente comp) { componenteList.add(comp); } public Componente remove(int index) { return componenteList.remove(index); } public Componente getFilho(int index){ return componenteList.get(index); } public int getComponenteCount() { return componenteList.size(); } }
  • 46. Pattern Composite Folha.java public class Folha extends Componente { public Folha(String pn) { super(pn); } public void operacao() { System.out.println(getPn()); } public void add(Componente comp){ } public Componente remove(int index){ return null; } public Componente getFilho(int index){ return null; } public int getComponenteCount() { return -1; } } Cliente.java public class Cliente { public static void main(String[] args) { Folha a1 = new Folha("A1"); Folha a2 = new Folha("A2"); Folha a3 = new Folha("A3"); Composite c1 = new Composite("C1"); c1.add(a1); c1.add(a2); Composite c2 = new Composite("C2"); c2.add(a3); Composite c3 = new Composite("C3"); c3.add(c1); c3.add(c2); c3.operacao(); } }
  • 47. Pattern Composite – Quando Usar ? • Sempre que houver necessidade de tratar um conjunto como um indivíduo • Há várias estratégias de implementação
  • 48. Patterns Estruturais • Adapter: Converter a interface de uma classe em outra interface esperada pelos clientes. • Façade: Oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. • Composite: Permitir o tratamento de objetos individuais e composições desses objetos de maneira uniforme. • Bridge: Desacoplar uma abstração de sua implementação para que os dois possam variar independentemente. • Proxy: Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. • Flyweight: Usar compartilhamento para suportar eficientemente grandes quantidades de objetos complexos. • Decorator: Anexar responsabilidades adicionais a um objeto dinamicamente
  • 49. Pattern Proxy – Problema • Sistema quer utilizar um determinado objeto... • Mas ele não está disponível (remoto, inaccessível, etc) • Solução: arranjar um intermediário que saiba se comunicar com ele eficientemente
  • 50. Pattern Proxy – Diagrama Objeto Desejado
  • 51. Pattern Proxy - Estrutura • Cliente usa intermediário em vez de sujeito real • Intermediário suporta a mesma interface que sujeito real • Intermediário contém uma referência para o sujeito real e repassa chamadas, possivelmente, acrescentando informações ou filtrando dados no processo.
  • 52. Pattern Proxy public class Creso { ... Sujeito deusApolo = Fabrica.getSujeito(); deusApolo.operacao(); ... } public class DeusApolo implements Sujeito { public Object operacao() { return coisaUtil; } } public class Oraculo implements Sujeito { private DeusApolo real; public Object operacao() { cobraTaxa(); return real.operacao(); } } public interface Sujeito { public Object operacao(); } Inacessível ao Cliente Cliente comunica-se com Objeto através dessa classe
  • 53. Pattern Proxy – Quando Usar ? • A aplicação mais comum é em objetos distribuídos • Vantagens • Transparência: mesma sintaxe usada na comunicação entre o cliente e sujeito real é usada no proxy • Permite o tratamento inteligente dos dados no cliente • Desvantagens • Possível impacto na performance • Transparência nem sempre é 100% (fatores externos como queda da rede podem tornar o proxy inoperante ou desatualizado
  • 54. Patterns Comportamentais •Chain of responsibility: enviar uma requisição para vários objetos sem especificar o destinatário explicitamente. •Command: requisição como objeto, para clientes parametrizarem diferentes requisições, filas, e suportar operações reversíveis. •Mediator: Definir um objeto que encapsula a forma como um conjunto de objetos interagem. •Memento: Externalizar o estado interno de um objeto para que o objeto possa ter esse estado restaurado posteriormente. •State: Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar. •Strategy: Definir uma família de algoritmos, encapsular cada um, e fazê-los intercambiáveis.
  • 55. Behavioral Chain of responsibility (cadeia de responsabilidade) Intenção: • Uma maneira de passar um pedido entre uma cadeia de objetos Observações: • O objeto que trata a solicitação deve ser escolhido automaticamente; • Deve-se emitir uma solicitação para um dentre vários objetos, • O conjunto de objetos que pode tratar uma solicitação deveria ser especificado dinamicamente.
  • 57. Behavioral Command (Comando) Intenção: •encapsular uma solicitação de comando como um objeto. Observações: •Parametrizar objetos por uma ação a ser executada. •Especificar, enfileirar e executar solicitações em tempos diferentes. •Especificar, enfileirar e executar solicitações em tempos diferentes.
  • 58. Uml
  • 59. Behavioral Mediator (Mediador) Intenção: •Define comunicação simplificada entre classes; Observações: •Mediator pode alavancar Observer para registrar dinamicamente colegas e se comunicar com eles. •Ele permite a unificação da interface de um sistema
  • 60. Behavioral Memento Intenção: •Sem violar o encapsulamento, captura e externaliza o estado interno de um objeto para que o objeto pode ser devolvido a este estado mais tarde. Observações: •Memento é muitas vezes utilizado em conjunto com Iterator. •Pode usar Memento para manter o estado necessário para uma operação de desfazer.
  • 61. Uml
  • 62. Behavioral State (Estado) Intenção: • Permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto aparecerá para mudar sua classe. Observações: • Facilita a expansão de estados. • Facilita a localizar as responsabilidades de estados específicos, • Os objetos Estado podem ser compartilhados se eles não contêm variáveis de instância​​
  • 63. Uml
  • 64. Behavioral Strategy (Estratégia) Intenção; •Encapsula um algoritmo dentro de uma classe Observações: •Strategy permite definir novas operações sem alterar as classes dos elementos sobre os quais opera. •Definir uma família de algoritmos e encapsular cada algoritmo como uma classe.
  • 65. Uml
  • 66. FIM