Pular para o conteúdo

Lista de Exercícios 009: Composite

Analise cada situação e diga se o padrão Composite é ou não uma boa escolha. Em cada caso, classifique como adequada ou não adequada e justifique brevemente.

  1. Situação 1: um sistema de arquivos precisa tratar pastas e arquivos usando a mesma operação obterTamanho().
  2. Situação 2: um módulo de autenticação só possui duas implementações independentes e nenhuma delas contém outras internamente.
  3. Situação 3: um menu de navegação web possui itens simples e submenus aninhados em vários níveis.
  4. Situação 4: um carrinho de compras guarda apenas uma lista plana de produtos sem kits, pacotes ou agrupamentos.
  5. Situação 5: uma plataforma de cursos organiza aulas, módulos e trilhas, permitindo que uma trilha contenha módulos e outros agrupamentos.

Leia o código abaixo, identifique o problema conceitual relacionado ao uso de estruturas hierárquicas e sugira como melhorá-lo em alto nível usando Composite.

class Produto {
String nome;
double preco;
}
class Caixa {
List<Object> itens = new ArrayList<>();
}
class CalculadoraPedido {
public double calcular(Object item) {
if (item instanceof Produto) {
return ((Produto) item).preco;
}
if (item instanceof Caixa) {
double total = 0;
for (Object filho : ((Caixa) item).itens) {
total += calcular(filho);
}
return total;
}
return 0;
}
}

Uma equipe está desenvolvendo um editor visual em que cada elemento pode ser uma forma simples ou um grupo de formas. O cliente precisa aplicar desenhar() tanto em uma única forma quanto em um grupo inteiro sem saber exatamente o tipo concreto do elemento. Qual alternativa descreve melhor a solução mais adequada?

a. Usar Adapter para converter cada forma em uma interface de desenho diferente a cada chamada.

b. Usar Composite para definir uma interface comum entre formas simples e grupos, delegando a execução pela árvore.

c. Usar Singleton para garantir que exista apenas um grupo de formas na aplicação.

d. Usar Factory Method para eliminar a necessidade de uma estrutura hierárquica no editor.

e. Usar Strategy para escolher dinamicamente a implementação de desenho para cada forma, sem criar uma hierarquia.

Implemente uma solução simples usando Composite para representar a estrutura de conteúdos de uma disciplina.

  • Crie uma interface ComponenteConteudo com o método int calcularDuracao().
  • Crie uma classe folha VideoAula com título e duração em minutos.
  • Crie uma classe composite Modulo que possa armazenar vários ComponenteConteudo.
  • Faça Modulo calcular a duração total somando todos os filhos.
  • Apresente no main uma estrutura com pelo menos um módulo contendo duas videoaulas e um submódulo com três videoaulas e imprima a duração total do módulo principal.