Participants

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/609dcec2-b8b9-4054-9cb3-03cab2be158d/Untitled.png

var kiaFactory = new KiaFactory();
var kiaEconomy = kiaFactory.GetEconomyCar();
var kiaLuxury = kiaFactory.GetLuxuryCar();

var hyundaiFactory = new HyundaiFactory();
var hyundaiEconomy = hyundaiFactory.GetEconomyCar();
var hyundaiLuxury = hyundaiFactory.GetLuxuryCar();

public interface IVehicle
{
	string GetName();
}

public class KiaPride : IVehicle
{
	public string GetName() => "Kia - Pride";
}

public class KiaRegal : IVehicle
{
	public string GetName() => "Kia - Regal";
}

public class HyundaiAccent : IVehicle
{
	public string GetName() => "Hyundai - Accent";
}

public class HyundaiSantaFe : IVehicle
{
	public string GetName() => "Hyundai - SantaFe";
}

public interface IVehicleFactory
{
	IVehicle GetLuxuryCar();
	IVehicle GetEconomyCar();
}

public class KiaFactory : IVehicleFactory
{
	public IVehicle GetLuxuryCar() => new KiaPride();
	public IVehicle GetEconomyCar() => new KiaRegal();
}

public class HyundaiFactory : IVehicleFactory
{
	public IVehicle GetLuxuryCar() => new HyundaiAccent();
	public IVehicle GetEconomyCar() => new HyundaiSantaFe();
}

Rules of Thumb