Na engenharia de software, design patterns criacionais lidam com mecanismos de criação de objetos. A intenção é criar objetos da forma apropriada à situação, uma vez que forma básica da criação de objetos pode resultar em problemas de design ou adicionar complexidade ao design. Os design patterns criacionais resolvem este problema controlando de alguma maneira a criação do objeto:
- Abstract Factory: Cria uma instância de diversas famílias de classes.
- Builder: Separa a construção do objeto de sua representação.
- Factory Method: Cria uma instância de diversas classes derivadas.
- Object Pool: Evita aquisição e liberação custosa de recursos através da reciclagem de objetos que não estão mais em uso.
- Prototype: Uma instância completamente inicializada que é copiada ou clonada.
- Singleton: Uma classe onde somente uma instância pode existir.
Às vezes, padrões de criação são concorrentes: há casos em que Prototype ou Abstract Factory podem ser usados de forma benéfica. Em outros momentos, são complementares: Abstract Factory pode armazenar um conjunto de Prototypes onde os objetos são clonados e retornados; o Builder pode usar um dos outros padrões para implementar os componentes que são construídos. Abstract Factory, Builder e Prototype podem usar Singleton na sua implementação.
- Abstract Factory, Builder e Prototype definem um objeto de fábrica que é responsável por conhecer e criar a classe de objetos de produto e o torna um parâmetro do sistema. Abstract Factory tem o objeto de fábrica produzindo objetos de diversas classes. Builder tem o objeto de fábrica que constrói um produto complexo incrementalmente, usando um protocolo complexo correspondente. Prototype tem o objeto de fábrica (aka prototype) que constrói um produto através da cópia de um objeto de protótipo.
- As classes da Abstract Factory são implementadas por Factory Methods, mas também podem ser implementadas usando Prototype.
- Abstract Factory pode ser utilizada como uma alternativa à Facade para esconder classes específicas da plataforma.
- Builder foca na construção passo a passo de um objeto complexo. Abstract Factory enfatiza a família de objetos de produto (simples ou complexos). Enquanto no Builder o produto é retornado como uma etapa final, no Abstract Factory o produto é retornado imediatamente.
- Builder está para criação assim como Strategy está para algoritmo.
- Builder sempre constroem um Composite.
- Factory Methods são normalmente chamados dentro de Template methods.
- Factory Method: criação através de herança. Prototype: criação através de delegação.
- O design freqüentemente começa usando Factory Method (menos complicado, mais customizável, subclasses proliferam) e evolui para Abstract Factory, Prototype ou Builder (mais flexíveis, porém mais complexos) conforme o designer descobre onde é necessária uma maior flexibilidade.
- Prototype não requer subclasse, mas requer uma operação Initialize. Factory Method requer subclasse, mas não requer Initialize.
- Designs que utilizam padrões Composite e Decorator podem também obter benefícios do Prototype.