Baixe o app para aproveitar ainda mais
Prévia do material em texto
Análise e Projeto de Sistemas II Material das Aulas disponível no AVA Aula 4 MSc. Karen Figueiredo – karen@ic.ufmt.br Exemplos de Padrões -Decorator- Padrões de Projeto 2 Categorias dos Padrões: Um olho de design para o garoto da herança... 3 Examinaremos o uso excessivo da herança Como decorar objetos em tempo de execução? Objetos livres para novas responsabilidades! Cenário 4 Cenário 5 Cenário 6 Cenário 7 BOOM de classes! -> problemas de manutenção! O que fazer quando muda o preço do leite? O que fazer quando querem adicionar uma nova cobertura? Cenário 8 Cenário 9 Cenário 10 Cenário 11 Cenário 12 Problemas? Novos condimentos irão forçar a inclusão de novos métodos e alterações no método cost Novas bebidas que não sigam o padrão de beverage terão métodos inúteis E se o cliente quiser uma bebida dupla? Cenário 13 Cenário 14 Cenário 15 Cenário 16 Cenário 17 Decorator 18 Propósito: Agregar responsabilidades adicionais a um objeto Fornecer uma alternativa flexível ao uso de subclasses para a extensão de funcionalidades Também conhecido como: Wrapper Decorator 19 Motivação: Queremos adicionar responsabilidades a objetos individuais e não a toda uma classe Um cliente não pode controlar como vai querer decorar um componente Queremos trabalhar com atribuição de responsabilidades em cadeia, sempre adicionando novos comportamentos Decorator 20 Aplicabilidade: Para acrescentar responsabilidades a objetos individuais de forma dinâmica e transparente (e sem afetar os outros objetos) Para responsabilidades que podem ser removidas Para evitar a explosão de subclasses por combinações Decorator 21 Participantes do Padrão: ... Decorator 22 Participantes do Padrão: • Component: Define a classe que pode ter responsabilidades adicionadas dinamicamente • ConcreteComponent: Define o objeto que pode ter responsabilidades atribuídas • Decorator: Mantém uma referência para o objeto Component, é do mesmo tipo que Component; Cada componente pode agregar um conjunto de decoradores Decorator 23 Participantes do Padrão: • ConcreteDecorator: Possui uma variável de instância para o Componente a ser decorado; Os decoradores podem adicionar novos comportamentos (ConcreteDecoratorN) ou novos estados (ConcreteDecoratorA) ao componente decorado Cenário 24 Decorator 25 Benefícios: Maior flexibilidade do que a herança estática Evita classes sobrecarregadas no topo da hierarquia Sistemas fáceis de customizar Decorator 26 Desvantagens: Sistemas difíceis de aprender e depurar (grande quantidade de pequenos objetos) Cenário 27 Cenário 28 Codificando... Cenário 29 Codificando... Cenário 30 Codificando... Cenário 31 Codificando... Cenário 32 Codificando... Dúvidas? 33 Exercício 34 1) Escreva o código para os condimentos Soy e Whip. 2) Faça as alterações necessárias no projeto da Cafeteria para definir o tamanho da bebida, incluir essa informação na descrição da bebida e calcular o preço da forma correta. Cada bebida tem um preço diferente por tamanho, por exemplo um HouseBlend P não tem o mesmo preço do Expresso P. Use getSize e setSize para os nomes dos métodos. Cenário 35 Codificando...pedidos! Dúvidas? 36 Exercício 37 3) Segundo a tabela de preços abaixo, diga o valor de cada pedido codificado anteriormente (beverage, beverage2 e beverage3). 4) Mostre como ficariam os pedidos de bebidas com tamanhos de acordo com as modificações do exercício 2 (M + ,50 e G + 1,00).
Compartilhar