namespace ConsoleApplication1
public static void Main()
RocketsAmmo foo = RocketsAmmo.CreateRocketsAmmo(RocketAmmoType.NV);
RocketsAmmo bar = RocketsAmmo.CreateRocketsAmmoNV();
RocketsAmmoLV baz = RocketsAmmo.CreateRocketsAmmoLV();
public enum RocketAmmoType
public abstract class RocketsAmmo
public int CountInBlock { get; }
public int Damage { get; }
public RocketAmmoType RocketAmmoType { get; }
protected RocketsAmmo(RocketAmmoType rocketAmmoType, int damage, int countInBlock)
RocketAmmoType = rocketAmmoType;
CountInBlock = countInBlock;
public static RocketsAmmo CreateRocketsAmmo(RocketAmmoType rocketAmmoType)
if (rocketAmmoType == RocketAmmoType.NV)
return new RocketsAmmoNV(RocketAmmoType.NV, 20, 1);
if (rocketAmmoType == RocketAmmoType.LV)
return new RocketsAmmoLV(RocketAmmoType.LV, 10, 1);
throw new ArgumentException("Cannot create RocketsAmmo");
public static RocketsAmmo CreateRocketsAmmoNV()
return new RocketsAmmoNV(RocketAmmoType.NV, 20, 1);
public static RocketsAmmoLV CreateRocketsAmmoLV()
return new RocketsAmmoLV(RocketAmmoType.LV, 10, 1);
public class RocketsAmmoNV : RocketsAmmo
public RocketsAmmoNV(RocketAmmoType rocketAmmoType, int damage, int countInBlock) : base(rocketAmmoType, damage, countInBlock)
public class RocketsAmmoLV : RocketsAmmo
public RocketsAmmoLV(RocketAmmoType rocketAmmoType, int damage, int countInBlock) : base(rocketAmmoType, damage, countInBlock)