Первое, что вам нужно сделать, это создать наследование:
public interface IAnimal
{
string SpeciesName {get; }
}
и реализовать его:
public class Tiger : IAnimal
{
public string SpeciesName { get { return "Tiger" ; } }
}
public class Cat : IAnimal
{
public string SpeciesName { get { return "Cat" ; } }
}
Давайте использовать его:
public abstract class MainSession
{
private List<IAnimal> _animals;
public IEnumerable<IAnimal> Animals {get { return _animals; }}
proteced void AddAnimal(IAnimal animal)
{
_animals.Add(animal);
}
}
public class TypeA : MainSession
{
public TypeA()
{
AddAnimal(new Tiger());
}
}
public class TypeB : MainSession
{
public TypeB()
{
AddAnimal(new Leopard());
}
}
Вы также можете преобразовать AddAnimal
в метод фабрики:
public abstract class MainSession
{
private List<IAnimal> _animals;
public IEnumerable<IAnimal> Animals {get { return _animals; }}
protected IAnimal CreateAnimal(string speciesName)
{
// Either use reflection to find the correct species,
// or a simple switch like below:
switch (speciesName)
{
case "tiger":
return new Tiger();
break;
}
}
}
Наличие фабрики в MainSession
нарушает принцип единой ответственности, поэтому я бы разбил его на отдельный класс.