TOOGLE
Factory Pattern - Back-End
Implementação Completa do Factory Method
O Factory Method é um padrão de design que permite criar objetos sem especificar a classe exata do objeto que será criado. Em vez de chamar diretamente o construtor de uma classe, o Factory Method define uma interface para criar um objeto, permitindo que subclasses decidam qual classe instanciar.

Exemplo Completo: Criação de Cliente para o Azure Blob Storage
Neste exemplo, vamos implementar o padrão Factory Method para criar clientes para o Azure Blob Storage de forma flexível.
_______________________________________________________________________________________________________
1 - Definir a Interface do Cliente
Primeiro, criamos uma interface que será responsável pela criação do cliente do Blob Storage.

public interface IBlobStorageClientFactory
{
    BlobContainerClient CreateBlobContainerClient();
}
_______________________________________________________________________________________________________
2- Implementação do Factory
Aqui, criamos uma implementação do Factory que vai gerar um cliente para o Blob Storage.

public class BlobStorageClientFactory : IBlobStorageClientFactory
{
    private readonly IConfiguration _configuration;

    public BlobStorageClientFactory(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public BlobContainerClient CreateBlobContainerClient()
    {
        var connectionString = _configuration.GetConnectionString("AzureBlobStorageConnectionString");
        var blobServiceClient = new BlobServiceClient(connectionString);
        var containerName = _configuration.GetValue<string>("containerBla");

        return blobServiceClient.GetBlobContainerClient(containerName);
    }
}
_______________________________________________________________________________________________________
3 - Controlador que Usa o Factory
Agora, utilizamos o Factory em um controlador, onde vamos realizar algumas operações de upload, download e exclusão de arquivos.

public class HomeController : Controller
{
 private readonly IBlobStorageClientFactory _blobStorageClientFactory;
 private readonly string _containerName;

 public HomeController(IBlobStorageClientFactory blobStorageClientFactory, IConfiguration configuration)
 {
     _blobStorageClientFactory = blobStorageClientFactory;
     _containerName = configuration.GetConnectionString("containerBla") ?? "defaultContainerName";
 }

 public async Task<IActionResult> Index()
 {
     var blobContainerClient = _blobStorageClientFactory.CreateBlobContainerClient();
     var blobItems = blobContainerClient.GetBlobsAsync();

     var files = new List<Azure.Storage.Blobs.Models.BlobItem>();

     await foreach (var blobItem in blobItems)
     {
         files.Add(blobItem);
     }

     return View(files.AsEnumerable());
 }
}