Padrão de projeto de software Composite

1.396 visualizações

Publicada em

Padrão de projeto de software Composite

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.396
No SlideShare
0
A partir de incorporações
0
Número de incorporações
26
Ações
Compartilhamentos
0
Downloads
18
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Padrão de projeto de software Composite

  1. 1. Composite www.trsampaio.com Tiago R. Sampaio
  2. 2. Introdução  Composite(Objeto Composto) é um padrão de projeto que permite que um objeto seja constituído de outros objetos semelhantes a ele formando uma hierarquia.  Utilizando o padrão Composite é simples criar uma hierarquia de objetos semelhantes. Semelhantes, significa aqui, objetos que implementam uma interface comum. O padrão simplifica o tratamento de cada elemento da hierarquia ao tratar a todos como implementações da mesma interface.
  3. 3. Descrição do Problema  Você quer construir um objeto que seja construído de outros objetos tal que, um ou mais objetos desses podem ser do mesmo tipo do objeto construído.  O objeto é construído por objetos que contém uma coleção de outros objetos.  Contudo esses objetos não são quaisquer, eles compartilham uma interface comum.
  4. 4. Exemplo  Por exemplo, um objeto do tipo Forma. Existem várias formas, mas todas elas podem ser construídas pela composição de outras formas. Um ou mais formas são primitivas, ou seja, não são construídas a partir de nenhuma forma, outras serão.  O exemplo mais simples é a forma Linha que representa uma semirreta. Um Triangulo é composto por três Linha. Um quadrado por quatro ,e etc… Um circulo não é representável por um conjunto finito de linhas, logo precisamos de uma forma primitiva Circulo.  Como construir os objetos do tipo Forma para que eles obedeçam a esta hierarquia é o que o padrão Composite resolve.
  5. 5. Descrição da Solução Construa uma interface ou classe abstrata que representa o tipo de objeto na hierarquia.
  6. 6. Quando usar
  7. 7. Exemplo de código
  8. 8. componente Participante public abstract class Participante { public String getNome() { throw new UnsupportedOperationException(); } public int getAssento() { throw new UnsupportedOperationException(); } public void adicionar(Participante participante) { throw new UnsupportedOperationException(); } public void remover(Participante participante) { throw new UnsupportedOperationException(); } public Participante getFilho(int index) { throw new UnsupportedOperationException(); } }
  9. 9. primitivo Individuo public class Individuo extends Participante { private String nome; private int assento; public Individuo(String nome, int assento) { this.nome = nome; this.assento = assento; } @Override public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; }
  10. 10. primitivo Individuo @Override public int getAssento() { return assento; } public void setAssento(int assento) { this.assento = assento; } @Override public String toString() { return "Nome: " + this.nome + " - Assento: " + this.assento; } }
  11. 11. composto Instituição import java.util.ArrayList; import java.util.List; public class Instituicao extends Participante { private String nome; private List<Participante> membros; public Instituicao(String nome) { this.nome = nome; membros = new ArrayList<Participante>(); } @Override public void adicionar(Participante participante) { membros.add(participante); } @Override public void remover(Participante participante) { membros.remove(participante); }
  12. 12. composto Instituição @Override public Participante getFilho(int index) { return membros.get(index); } @Override public String getNome() { return nome; } public List<Participante> getMembros() { return membros; } @Override public String toString() { return "Instituição: " + this.nome; } public void imprimeMembros() { for (Participante membro : membros) { System.out.println(membro + " - Instituição: " + this.nome); } } }

×