public interface ISmartphone
string Especificaciones { get; }
string Especificaciones { get; }
public interface IFabricaCelulares
ISmartphone CrearSmartphone();
public class GalaxyS22 : ISmartphone
public string Modelo => "Samsung Galaxy S22";
public string Especificaciones => "8 GB RAM, 128 GB Storage";
public class GalaxyTabS8 : ITablet
public string Modelo => "Samsung Galaxy Tab S8";
public string Especificaciones => "12 GB RAM, 256 GB Storage";
public class iPhone13 : ISmartphone
public string Modelo => "iPhone 13";
public string Especificaciones => "4 GB RAM, 64 GB Storage";
public class iPadPro : ITablet
public string Modelo => "iPad Pro";
public string Especificaciones => "8 GB RAM, 128 GB Storage";
public class SamsungFactory : IFabricaCelulares
public ISmartphone CrearSmartphone() => new GalaxyS22();
public ITablet CrearTablet() => new GalaxyTabS8();
public class AppleFactory : IFabricaCelulares
public ISmartphone CrearSmartphone() => new iPhone13();
public ITablet CrearTablet() => new iPadPro();
public class FachadaTiendaCelulares
public string OrdenarSmartphone(string marca)
IFabricaCelulares fabrica = ObtenerFabrica(marca);
var smartphone = fabrica.CrearSmartphone();
return $"Ordenaste un {smartphone.Modelo} con las siguientes especificaciones: {smartphone.Especificaciones}";
public string OrdenarTablet(string marca)
IFabricaCelulares fabrica = ObtenerFabrica(marca);
var tablet = fabrica.CrearTablet();
return $"Ordenaste un {tablet.Modelo} con las siguientes especificaciones: {tablet.Especificaciones}";
private IFabricaCelulares ObtenerFabrica(string marca)
return new SamsungFactory();
return new AppleFactory();
throw new ArgumentException("Marca no soportada");
static void Main(string[] args)
var fachada = new FachadaTiendaCelulares();
Console.WriteLine(fachada.OrdenarSmartphone("Samsung"));
Console.WriteLine(fachada.OrdenarTablet("Apple"));
Console.WriteLine(ex.Message);