Design Patterns Builder Pattern Projeto de Sistemas de Software João Campos [email protected] Abril de 2009 Sumário • Builder o o o o o o o o Propósito Motivação Aplicabilidade Estrutura Participantes Colaboradores Consequência Exemplo © LES/PUC-Rio Design Patterns 1. Abstract Factory 2. Builder 3. Factory Method 4. Prototype 5. Singleton 6. Adapter 7. Bridge 8. Composite 9. Decorator 10.Facade 11.Flyweight 12.Proxy 1. Chain of Responsibility 2. Command 3. Interpreter 4. Iterator 5. Mediator 6. Memento 7. Observer 8. State 9. Strategy 10.Template Method 11.Visitor Padrões de Criação Padrões Estruturais Padrões de Comportamento © LES/PUC-Rio Builder Propósitos o Encapsular a construção de um objeto (normalmente um produto). o Permitir que o objeto (produto) seja construído passo-apasso. © LES/PUC-Rio Builder • Motivação o o o o o o Considere um exemplo de planejamento de viagem em uma agência de viagens. O cliente pede que o agente de viagens crie um pacote de uma semana na França. O agente monta o itinerário da viagem, faz as reservas de hotel e compra os ingressos para diversos eventos, etc. Cada dia da viagem pode ser configurado de modo diferente dos outros dias. A complexidade de se montar um plano de viagens é tratada pelo agente de viagens, que detém o know-how. O cliente apenas dirige o agente de viagens (Builder) na construção do plano. O cliente não precisa saber quais são os hotéis disponíveis e como reservá-los. Não precisa saber como comprar uma entrada para o Museu do Louvre. A montagem do plano pode ser feita passo-a-passo ou dia-a-dia e com muitas variações. © LES/PUC-Rio Builder • Aplicabilidade o Quando se quer ter a capacidade de construir diferentes tipos de objetos complexos, mantendo o controle sobre o processo de construção no código cliente. © LES/PUC-Rio Builder • Estrutura © LES/PUC-Rio Builder • Participantes: o Builder - interface abstrata para criar objetos (produtos). o Concrete Builder - provê implementação para o Builder. Constrói e junta partes para construir objetos. o Director - responsável por gerenciar a correta sequencia de criação de objetos. o Product - o objeto final que será criado pelo Director. © LES/PUC-Rio Builder • Colaboração Builder Construtor Director ConcreteBuilder 1 Constrói 1 Product “A collaboration is a group of objects interacting together to accomplish some functionality” © LES/PUC-Rio Builder • Consequências o Esconde os detalhes de como o produto é montado. o Cada Builder específico é independente de qualquer outro e do resto do programa. Isso aumenta a modularidade. o Mais controle sobre cada produto final que o Builder constrói. © LES/PUC-Rio Builder • Exemplo O cliente usa uma interface abstrata para montar o plano O cliente dirige o builder para a construção do planner Builder Client constructPlanner() AbstractBuilder buildDay() addHotel() addReservation() addSpecialDay() addTickets() getVacantionPlanner() Builder buildDay(date); Builder.addHotel(date, “Grand Facadian”); Builder.addTickets(“Patterns on Ice”) Planner yourPlanner = builder getVacationPlanner() VacationBuilder buildDay() addHotel() addReservation() O cliente dirige o builder para criar o planner em um número de passos e então chama o método getVacationPlanner() addSpecialDay() addTickets() getVacantionPlanner() © LES/PUC-Rio O builder concreto cria produtos reais e os armazena na “vacation composite structure” Builder • Referências o o o o UML 2 for Dummies Por Michael Jesse Chonoles, James A. Schardt Head First Design Patterns Por Eric Freeman; Elisabeth Freeman; Kathy Sierra; Bert Bates. http://en.wikipedia.org/wiki/Builder_pattern http://www.allapplabs.com/java_design_patterns/builder_pattern.htm © LES/PUC-Rio Obrigado pela atenção! :)