Вот рассмотрим простейшую учебную:
есть бренды электроники.
для каждого бренда несколько девайсов (мобильник, планшет)
для простоты ограничим функционал включением.
static void Main(string[] args)
{
foreach (IDeviceFactory factory in GetDeviceFactories())
{
Client client = new Client(factory);
WorkWithDevices(client);
}
}
static IDeviceFactory[] GetDeviceFactories()
{
return new IDeviceFactory[] {
new AppleDevicesFactory(),
new SamsungDevicesFactory(),
new XiaomiDevicesFactory()
};
}
class Client
{
private const int CableLength = 10;
public ICellPhone CellPhone;
public ICharger Charger;
public ILaptop Laptop;
public ITablet Tablet;
public Client(IDeviceFactory factory)
{
CellPhone = factory.CreateCellPhone();
Charger = factory.CreateCharger(CableLength);
Laptop = factory.CreateLaptop();
Tablet = factory.CreateTablet();
}
}
public class AppleDevicesFactory : IDeviceFactory
{
public ICellPhone CreateCellPhone()
{
return new CellPhoneApple();
}
public ICharger CreateCharger(int cableLength)
{
return new ChargerApple(cableLength);
}
public ILaptop CreateLaptop()
{
return new LaptopApple();
}
public ITablet CreateTablet()
{
return new TabletApple();
}
}
Собственно куда здесь, на каком уровне и самое главное преследуя какую цель можно вкорячить дженерики и какие от этого будут преимущества?