Introdução ao padrão de fábrica
Um padrão de projeto é um método para resolver problemas recorrentes no projeto de software. O Factory Pattern é um dos padrões de projeto que ajudam a criar objetos de forma flexível e desacoplada.
O Factory Pattern é um padrão de design criacional em C++ que permite a criação de objetos sem conhecer explicitamente a classe do objeto. Ele fornece uma maneira de encapsular a lógica de criação de objetos complexos em uma classe de fábrica separada. Isso é feito definindo uma interface comum para a criação de objetos, onde a classe específica do objeto é determinada em tempo de execução.
Em vez de criar um objeto diretamente, usamos o método de fábrica para nos dar uma instância do objeto que queremos. Dessa forma, podemos ocultar as etapas complicadas envolvidas na criação do objeto e simplificar a alteração ou modificação do objeto no futuro.
Por que usar o padrão de fábrica?
Existem várias razões pelas quais podemos querer usar o padrão de fábrica. Uma razão é que permite desacoplar o código de classes específicas. Usando um método de fábrica, podemos alternar facilmente uma classe para outra sem precisar alterar nenhum outro código e torná-lo mais eficiente.
Outra razão para usar o padrão de fábrica é que ele pode tornar o código mais testável. Os padrões de fábrica nos permitem testar o código criando objetos fictícios.
Aqui estão algumas das razões pelas quais o padrão de fábrica é usado em C++:
- O padrão Factory Method é usado quando uma classe não sabe com antecedência quais objetos ela precisa criar.
- O padrão é usado quando uma classe depende de suas subclasses para especificar os objetos que ela cria.
- É útil quando você deseja encapsular a lógica para criar um objeto complexo em um só lugar.
Exemplo de padrão de fábrica em C++
Em C++, podemos implementar o padrão de fábrica definindo uma classe base abstrata com um método de fábrica virtual. Este método deve retornar um ponteiro para a instância da classe desejada. Depois disso, podemos derivar classes concretas dessa classe base e substituir o método de fábrica para retornar uma instância da classe apropriada.
Aqui está um exemplo de como podemos usar essa implementação do padrão de fábrica:
#includeusando namespace std ;
classe Forma {
público :
virtual vazio empate ( ) = 0 ;
estático Forma * criarforma ( int tipo ) ;
} ;
círculo de classe : forma pública {
público :
vazio empate ( ) {
cout << 'Desenhar um círculo.' << fim ;
}
} ;
classe Retângulo : forma pública {
público :
vazio empate ( ) {
cout << 'Desenhar um retângulo.' << fim ;
}
} ;
Forma * Forma :: criarforma ( int tipo ) {
se ( tipo == 1 ) {
retornar novo círculo ( ) ;
} outro se ( tipo == 2 ) {
retornar novo retângulo ( ) ;
} outro {
retornar nullptr ;
}
}
int principal ( ) {
Forma * círculo = Forma :: criarforma ( 1 ) ;
círculo -> empate ( ) ;
Forma * retângulo = Forma :: criarforma ( 2 ) ;
retângulo -> empate ( ) ;
retornar 0 ;
}
Neste exemplo, temos uma classe Shape com duas classes derivadas: Circle e Rectangle. A classe Shape tem uma função virtual pura draw(), que é implementada pelas classes derivadas. A classe Shape também possui uma função estática createShape(int type), que atua como um método de fábrica para criar instâncias das classes derivadas com base no tipo especificado. A função draw() é chamada nos objetos criados para demonstrar seu comportamento específico.
Conclusão
O Factory Pattern é um padrão de design criacional em C++ que permite a criação de objetos sem conhecer explicitamente a classe do objeto. Ele fornece uma interface simplificada para criar objetos, ocultando a complexa lógica de criação por trás de uma classe de fábrica. Isso é feito definindo uma interface comum para a criação de objetos, onde a classe específica do objeto é determinada em tempo de execução. Leia mais sobre padrões de fábrica neste artigo.