C#
- Simple Factory: Exemplo
![]() |
Hoje veremos um exemplo de aplicação do padrão Factory conhecido como Simple Factory implementado na linguagem C#. |
Embora seja uma Factory o Simple Factory não esta catalogado dentre os padrões de projetos criacionais do famoso livro da Gang of four.
O padrão Simple Factory é a classe mais simples que possui métodos para a criação de outras instâncias de classe. Por exemplo, se você precisa criar muitas de instâncias de uma classe específica, é muito mais fácil usar um método que retorna instâncias para você. Essa é a ideia principal do Simple Factory.
O Simple Factory é útil quando você não sabe qual tipo de objeto será usado e então você cria uma fábrica para gerenciar isso para você. Nesta classe você cria um método, que pode ser estático ou não, que vai retornar o o objeto do tipo correto de acordo com um critério definido.
Para ilustrar a sua utilização vamos definir um cenário onde precisamos montar e/ou imprimir livros. Para isso vamos criar um projeto Console do tipo NET 5.0 usando o Visual Studio 2019.
Vamos iniciar definindo uma interface (poderia ser uma classe abstrata) para representar o tipo Livro:
using System;
namespace SimpleFactory |
A seguir vamos criar a classe concreta Livro que vai implementar a interface ILivro:
using System;
namespace SimpleFactory1 public Livro(string titulo, string autor, int paginas, DateTime lancamento) public override string ToString() |
Agora vamos criar a Factory onde vamos definir um método estático que vai retornar um objeto de um tipo conforme um critério definido:
using System;
namespace SimpleFactory1 |
Na Factory criada estamos retornando um instância da nossa interface ILivro por meio do método CriaLivro().
Agora vamos usar a Factory definindo o código a seguir no método Main da classe Program:
using System; using static System.Console;
namespace SimpleFactory1 WriteLine("Titulo: " + livro.Titulo); WriteLine("Objeto Livro: " + livro.ToString()); |
Resultado:
Sem usar o padrão Simple Factory , ou seja usando uma classe normal, teríamos que chamar diretamente uma nova instância de Livro:
Livro livro = new Livro("C# - Básico", "James King", 323, DateTime.Now);
Usando a nossa
classe LivroFactory abstraímos o processo de
criação da classe Livro.
Observe na saída, a chamada do método livro.ToString()
mostra que a herança funcionou conforme o esperado, então estamos obtendo
um objeto Livro como queríamos, mesmo que não haja conhecimento direto (ou
referência a) dele em nosso código de inicialização:
Este é um exemplo básico do padrão Simple Factory.
Poderíamos ainda adicionar novos tipos de livro e executar alguma lógica básica
no método CriaLivro() para garantir que a classe de
tipo de livro adequada seja gerada e retornada, mas não importa o que aconteça,
nosso código de inicialização por meio da classe
LivroFactory não sabe ou se preocupa com como isso funciona.
Pegue o projeto
aqui : SimpleFactory.zip
E estamos conversados...
"Bom é ter esperança, e aguardar em silêncio a
salvação do Senhor."
Lamentações 3:26
Referências:
C# - Obtendo a data e a hora por TimeZone
C# - O Struct Guid - Macoratti.net
C# - Checando Null de uma forma mais elegante
DateTime - Macoratti.net
Null o que é isso ? - Macoratti.net
Formatação de data e hora para uma cultura ...
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis) -