Padrão de projeto de software Composite
-
Upload
tiago-r-sampaio -
Category
Software
-
view
181 -
download
5
description
Transcript of Padrão de projeto de software Composite
Compositewww.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;
}
@Overridepublic String getNome() {
return nome;}
public void setNome(String nome) {this.nome = nome;
}
primitivo Individuo
@Overridepublic int getAssento() {
return assento;}
public void setAssento(int assento) {this.assento = assento;
}
@Overridepublic String toString() {
return "Nome: " + this.nome + " - Assento: " + this.assento;}
}
composto Instituiçãoimport 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>();
}
@Overridepublic void adicionar(Participante participante) {
membros.add(participante);}
@Overridepublic void remover(Participante participante) {
membros.remove(participante);}
composto Instituição@Overridepublic Participante getFilho(int index) {
return membros.get(index);}
@Overridepublic String getNome() {
return nome;}
public List<Participante> getMembros() {return membros;
}
@Overridepublic String toString() {
return "Instituição: " + this.nome;}
public void imprimeMembros() {for (Participante membro : membros) {System.out.println(membro + " - Instituição: " + this.nome);
}}
}