É 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