Neste caso o padrão a aplicar é o Composite. Este padrão permite tratar conjunto de itens como se fossem itens isolados, evitando assim que o código cliente tenha que distinguir se está a lidar só com um item isolado ou com um conjunto de itens. Assim, é necessário definir uma nova entidade no sistema que representa o conjunto de produtos alimentares com o comportamento indicado relativamente às funcionalidades de um produto alimentar. Esta nova classe, GrupoProdutoAlimentares, corresponde à entidade Composite do padrão a aplicar e irá concretizar a interface ProdutoAlimentar (tal como indicado pela estrutura do padrão) por forma a que o código cliente não tenha que distinguir se está a lidar com um produto alimentar isolado ou com um conjunto de produtos alimentares. Assim, após a aplicação deste padrão, a alteração a realizar ao código é a seguinte:
public class GrupoProdutoAlimentares implements ProdutoAlimentar { private List<ProdutoAlimentar> _produtos; public ConjuntoProdutos() { _produtos = new ArrayList<>(); } public void add(ProdutoAlimentar p) { _produtos.add(p); } public int obtemPreco() { int preco = 0; for (ProdutoAlimentar p : _produtos) preco += p.obtemPreco(); return p*0.9; } public String obtemDescricao() { String str = ""; for (ProdutoAlimentar p : _produtos) str += p.obtemDescricao() + "\n"; return str; } }