SlideShare uma empresa Scribd logo
1 de 12
Composite 
www.trsampaio.com 
Tiago R. Sampaio
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.
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.
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.
Descrição da Solução 
Construa uma interface ou classe abstrata que 
representa o tipo de objeto na hierarquia.
Quando usar
Exemplo de código
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(); 
} 
}
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; 
}
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; 
} 
}
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); 
}
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); 
} 
} 
}

Mais conteúdo relacionado

Semelhante a Composite Design Pattern Explained

Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
Construtor em Java
Construtor em JavaConstrutor em Java
Construtor em JavaEderson Lima
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classesCarlos Melo
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 
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
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 

Semelhante a Composite Design Pattern Explained (16)

Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
Construtor em Java
Construtor em JavaConstrutor em Java
Construtor em Java
 
v
vv
v
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classes
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Aula05
Aula05Aula05
Aula05
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
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
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 

Mais de Tiago R. Sampaio

Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuídoTiago R. Sampaio
 
Web Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOEWeb Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOETiago R. Sampaio
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERLTiago R. Sampaio
 

Mais de Tiago R. Sampaio (8)

Linux - Um estudo de caso
Linux - Um estudo de casoLinux - Um estudo de caso
Linux - Um estudo de caso
 
Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuído
 
Web Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOEWeb Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOE
 
Diagrama UML Pergamum
Diagrama UML PergamumDiagrama UML Pergamum
Diagrama UML Pergamum
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Banco de Dados XML
Banco de Dados XMLBanco de Dados XML
Banco de Dados XML
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERL
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 

Composite Design Pattern Explained

  • 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. 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. 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. Descrição da Solução Construa uma interface ou classe abstrata que representa o tipo de objeto na hierarquia.
  • 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. 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. 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. 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. 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); } } }