Padrão de projeto de software Composite

12
Composite www.trsampaio.com Tiago R. Sampaio

description

Padrão de projeto de software Composite

Transcript of Padrão de projeto de software Composite

Page 1: Padrão de projeto de software Composite

Compositewww.trsampaio.com

Tiago R. Sampaio

Page 2: Padrão de projeto de software Composite

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.

Page 3: Padrão de projeto de software Composite

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.

Page 4: Padrão de projeto de software Composite

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.

Page 5: Padrão de projeto de software Composite

Descrição da Solução

Construa uma interface ou classe abstrata que representa o tipo de objeto na hierarquia.

Page 6: Padrão de projeto de software Composite

Quando usar

Page 7: Padrão de projeto de software Composite

Exemplo de código

Page 8: Padrão de projeto de software Composite

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();

}}

Page 9: Padrão de projeto de software Composite

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;

}

Page 10: Padrão de projeto de software Composite

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;}

}

Page 11: Padrão de projeto de software Composite

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);}

Page 12: Padrão de projeto de software Composite

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);

}}

}