quinta-feira, 1 de julho de 2010

Composite (GoF- padrão estrutural)

O que é ?
É quando podemos tratar objetos individuais e objetos compostos da mesma maneira.

Caso de uso:
Quando o relacionamento entre objetos for uma árvore, como se os elementos que formam o conjunto pudessem ter níveis hierárquicos, com granularidades (extensão em partes pequenas) diferentes. Ex.: presidente - diretor - operário.

Exemplo:

Tenho as seguintes classes:

public class Gerente {
private String nome;
}

public class Estagiario {
private String nome;
}

Ambas tem em comum o fato de se referir a pessoas, então neste exemplo irei criar a seguinte interface:

public interface Pessoa {

public String getNome(){
return nome;
}

}

Após a classe Gerente e a classe Estagiário implementarem a interface Pessoa, ambas terão um objetos simples.

Podendo se tornar compostos se:

exemplo:
A classe Gerente precisar ser dividida em departamentos.
Onde deveriamos ter um gerente para o RH, outro para o Marketing, outro para vendas...

Sendo assim, nós devemos implementar aquilo que há de comum entre as classe (neste caso referindo-se a pessoa gerente do RH, a pessoa gerente do Marketing, a pessoa gerente do Vendas...), ficando desta maneira:

public class Gerente implements Pessoa{

private String nome;

ArrayList <Pessoa> rh;
ArrayList <Pessoa> marketing;
ArrayList <Pessoa> vendas;

}

Valendo a mesma regra se tivessemos que fazer algo com a classe Estagiario.


Estrutura:
















Vantagens:
  • Torna-se mais fácil de adicionar outros tipos de componentes, pois os objetos que utilizaram o composite implementaram a mesma interface, fazendo com que sejam tratadas de um jeito uniforme.

Desvantagens:
  • O código pode gerar complexidade na hora de compor algum conjunto dependendo da estrutura do seu problema. Se tivermos composições de composições, e na composição mais inferior fizermos alguma modificação, poderemos ter alguns problemas na composição superiores.



Nenhum comentário:

Postar um comentário

DÚVIDAS - CRITICAS - SUGESTÕES