Contexto
Modele um sistema para uma montadora de carros:
• Sabe-se que na montagem de um carro, estão envolvidos:– Roda: marca, aro, tipo (liga leve/comum);– Motor: potência, nível lubrificante;– Ar-condicionado: tipo (digital/comum), potência;
Factory Method
“Definir uma interface para criar um objeto, mas deixar as subclasses decidirem que classe instanciar. O Factory Method permite adiar a instanciação para subclasses.”
Factory Method
• Ao invés de instanciar objetos diretamente, deixamos esta responsabilidade à cargo de uma fábrica de objetos.
• Com isto ganhamos em flexibilidade no código• Cuidado com a implementação: Pode-se
agregar complexidade desnecessária ao código.
Implementação
• Pode-se dar através de métodos estáticos;• Classe abstrata atraves de herança;• Classe completamente concreta;
Abstract Factory
“Fornecer uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas."
Abstract Factory
• Agrupamento de objetos por categoria/família• Em geral cria-se uma interface que
corresponde à família/agrupamento ao qual aquele objeto pertence
• Desta forma, quem solicita o objeto não sabe ao certo a qual classe aquela instância realmente pertence.
Singleton
“Garantir que uma classe tenha somente uma instância e fornece um ponto global de acesso para a mesma.”
Singleton
• Por que motivo teríamos a necessidade de manter uma única instância de um determinado tipo de objeto?
Singleton
• Relatórios/Dados pertinentes à utilização de um determinado objeto
• Dados de usuário (login, etc...)• Classes Singleton são interessantes quando é
necessario unificar o acesso a certos aspectos do programa.
Prototype
“Especificar tipos de objetos a serem criados usando uma instância protótipo e criar novos objetos pela cópia desse protótipo.”
Prototype
• Imagine uma lista de carros que o cliente precisa utilizar, mas que só serão conhecidos em tempo de execução.
• Para isto, podemos criar um protótipo de carro, que contém características pré-definidas, as quais podemos simplesmente manipular de acordo com a necessidade.
Builder
“Separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações.”
Builder
• Semelhante ao Abstract Factory e Factory Method;
• No entando, permite a construção de um objeto em partes menores - através de métodos específicos;
Builder
• Normalmente, cria-se uma interface que define os metodos comuns ao construtor
• Nas implementações concretas, define-se as características que serão associadas àquela instância de objeto
• Desta forma, delegamos a responsabilidade de construção ao Builder, facilitando o processo de criação de objetos