Padrão de fábrica em C++

Padrao De Fabrica Em C



O Factory Pattern é uma forma de criar objetos no desenvolvimento de software sem a necessidade de conhecer os detalhes específicos de como eles são criados. 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. Pertence à categoria de padrões de design que tratam dos mecanismos de criação de objetos. Este artigo aborda padrões de fábrica em C++.

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:

#include

usando 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.

  Uma imagem contendo texto, fonte, captura de tela Descrição gerada automaticamente

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.