У меня есть два объекта: Птица и Собака . Птица и Собака имеют идентичные реализации для примерно 50% методов / свойств, но разные несвязанные методы и свойства для остальных 50%.
Я занимаюсь рефакторингом и не знаю, какая стратегия самая лучшая.
Я попытался определить суперкласс Animal , чтобы реализовать общие методы в суперклассе и позволить дочерним классам определять свои собственные методы / свойства.
Я написал фабрику, которая возвращала одно или другое - все это кажется правильным ... но я запутался, когда пишу код вызова .. например,
public class Animal{
public string Talk(){ return "yak yak yak";
}
public class Dog:Animal{
public string Walk(){ return "walk walk walk"; }
}
public class Bird:Animal{
public string Fly(){ return "flap flap flap"; }
}
...
Animal thing = CreatureFactory.GetCreature(modifier);
Когда я хочу использовать вещь до Talk нет проблем,
Debug.Print(thing.Talk());
но как насчет того, когда я, как программист, хочу, чтобы он был Fly , могу ли я привести его к Bird ? Это кажется неправильным ... но определение Fly метода для Dog тоже кажется неправильным.